我们用到的第三方库有 Requests、Selenium、Aiotttp 等。
进行爬虫安装相关软件说明;
参考文档:https://germey.gitbooks.io/python3webspider/content/1.2.1-Requests%E7%9A%84%E5%AE%89%E8%A3%85.html
requests安装:
2. Pip安装
无论是 Windows、Linux 还是 Mac,都可以通过 Pip 这个包管理工具来安装。
在命令行下运行如下命令即可完成 Requests 库的安装:
pip3 install requests
为了验证库是否已经安装成功,可以在命令行下测试一下:
$ python3
>>> import requests
1.2.2 Selenium的安装
Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等等操作,对于一些 JavaScript 渲染的页面来说,此种抓取方式非常有效,下面我们来看下 Selenium 的安装过程。
2. Pip安装
推荐直接使用 Pip 安装,执行如下命令即可:
pip3 install selenium
验证安装
进入 Python 命令行交互模式,导入一下 Selenium 包,如果没有报错,则证明安装成功。
$ python3
>>> import selenium
但这样还不够,我们还需要浏览器如 Chrome、Firefox 等浏览器来配合 Selenium 工作。
在后文我们会介绍 Chrome、Firefox、PhantomJS 三种浏览器的配置方式,有了浏览器我们才可以配合 Selenium 进行页面的抓取。
1.2.3 ChromeDriver的安装
在上节我们成功安装好了 Selenium 库,但是它是一个自动化测试工具,需要浏览器来配合它使用,那么本节我们就介绍一下 Chrome 浏览器及 ChromeDriver 驱动的配置。
首先需要下载一个 Chrome 浏览器,方法多样,在此不再赘述。
随后我们需要安装一个 ChromeDriver 才能驱动 Chrome 浏览器完成相应的操作,下面我们来介绍下怎样安装 ChromeDriver。
1.2.3 ChromeDriver的安装
在上节我们成功安装好了 Selenium 库,但是它是一个自动化测试工具,需要浏览器来配合它使用,那么本节我们就介绍一下 Chrome 浏览器及 ChromeDriver 驱动的配置。
首先需要下载一个 Chrome 浏览器,方法多样,在此不再赘述。
随后我们需要安装一个 ChromeDriver 才能驱动 Chrome 浏览器完成相应的操作,下面我们来介绍下怎样安装 ChromeDriver。
2. 准备工作
在这之前请确保已经正确安装好了 Chrome 浏览器并可以正常运行,安装过程不再赘述。
3. 查看版本
点击 Chrome 的菜单,帮助->关于 Chrome,即可查看 Chrome 的版本号,如图 1-14 所示:
图 1-14 Chrome 版本号
在这里我的版本是 58.0。
请记住 Chrome 版本号,在后面选择 ChromeDriver 版本时需要用到。
4. 下载ChromeDriver
打开 ChromeDriver 的官方网站,链接为:https://sites.google.com/a/chromium.org/chromedriver/downloads。可以看到到目前为止最新版本为 2.31,其支持的 Chrome 浏览器版本为 58-60,最新版本以官网为准,官网页面如图 1-15 所示:
图 1-15 官网页面
如果你的 Chrome 版本号是58-60,那么可以选择此版本下载。
如果版本不在此范围,那可以继续查看之前的 ChromeDriver 版本,每个版本都有相应的支持 Chrome 版本介绍,请找好自己的 Chrome 浏览器版本对应的 ChromeDriver 版本再下载,否则可能导致无法正常工作。
找好对应的版本号后随后到 ChromeDriver 镜像站下载对应的安装包即可:https://chromedriver.storage.googleapis.com/index.html,不同平台可以下载不同的安装包。
5. 环境变量配置
下载完成后将 ChromeDriver 的可执行文件配置到环境变量下。
在 Windows 下,建议直接将 chromedriver.exe 文件拖到 Python 的 Scripts 目录下,如图 1-16 所示:
图 1-16 Python Scripts 目录
也可以单独将其所在路径配置到环境变量,环境变量的配置方法请参见 Python3 的安装一节。
在 Linux、Mac 下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。
例如移动文件到 /usr/bin 目录,首先命令行进入其所在路径,然后将其移动到 /usr/bin:
sudo mv chromedriver /usr/bin
当然也可以将 ChromeDriver 配置到 $PATH,首先可以将可执行文件放到某一目录,目录可以任意选择,例如将当前可执行文件放在 /usr/local/chromedriver 目录下,接下来可以修改 ~/.profile 文件,命令如下:
export PATH="$PATH:/usr/local/chromedriver"
保存然后执行:
source ~/.profile
即可完成环境变量的添加。
6. 验证安装
配置完成之后,就可以在命令行下直接执行 chromedriver 命令了。
命令行下输入:
chromedriver
输入控制台有类似输出,如图 1-17 所示:
图 1-17 控制台输出
如果有类似输出则证明 ChromeDriver 的环境变量配置好了。
随后再在程序中测试,执行如下 Python 代码:
from selenium import webdriver
browser = webdriver.Chrome()
运行之后会弹出一个空白的 Chrome 浏览器,证明所有的配置都没有问题,如果没有弹出,请检查之前的每一步的配置。
如果弹出之后闪退,则可能是 ChromeDriver 版本和 Chrome 版本不简容,请更换 ChromeDriver 版本。
如果没有问题,接下来我们就可以利用 Chrome 来做网页抓取了。
1.2.5 PhantomJS的安装
如果我们使用 Chrome 或 Firefox 进行网页抓取的话,每次抓取的时候,都会弹出一个浏览器,比较影响使用。所以在这里再介绍一个无界面浏览器,叫做 PhantomJS。
PhantomJS 是一个无界面的,可脚本编程的 WebKit 浏览器引擎。它原生支持多种 web 标准:DOM 操作,CSS 选择器,JSON,Canvas 以及 SVG。
Selenium 支持 PhantomJS,这样在运行的时候就不会再弹出一个浏览器了,而且其运行效率也是很高的,还支持各种参数配置,使用非常方便,下面我们就来了解一下 PhantomJS 的安装过程。
2. 下载 PhantomJS
我们需要在官方网站下载对应的安装包。http://phantomjs.org/download.html,它支持多种操作系统,Windows、Linux、Mac、FreeBSD 等,我们可以选择对应的平台将安装包下载下来。
下载完成之后,需要将 PhantomJS 的可执行文件所在的路径配置到环境变量里。如在 Windows 下,将下载的文件解压之后打开会看到一个 bin 文件夹,里面会包括一个可执行文件 phantomjs.exe,我们需要将它直接放在配置好环境变量的路径下或者将它所在的路径配置到环境变量里,如我们可以将它直接复制到 Python 的 Scripts 文件夹,也可以将它所在的 bin 目录加入到环境变量。
Windows 下环境变量的配置可以参见 Python3 安装一节,Linux 及 Mac 环境变量配置可以参见 ChromeDriver 安装一节,在此不再赘述,关键在于将 PhantomJS 的可执行文件所在路径配置到环境变量里。
配置成功后,可以在命令行下测试一下,输入
phantomjs
如果可以进入到 PhantomJS 的命令行,那就证明配置完成了,如图 1-21 所示:
图 1-21 控制台
3. 验证安装
在 Selenium 中使用的话,我们只需要将 Chrome 切换为 PhantomJS 即可。
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
print(browser.current_url)
运行之后我们就不会发现有浏览器弹出了,但实际上 PhantomJS 已经运行起来了,在这里我们访问了百度,然后将当前的 URL 打印出来。
控制台输出如下:
https://www.baidu.com/
如此一来我们便完成了 PhantomJS 的配置,在后面我们可以利用它来完成一些页面的抓取。
4. 结语
以上三节我们介绍了 Selenium 对应的三大主流浏览器的对接方式,在后文我们会对 Selenium 及各个浏览器的对接方法进行更加深入的探究。
7. 结语
既然 Chrome 可以通过 Selenium 驱动,Firefox 也可以,如果想要实现 Selenium 驱动 Firefox 浏览器可以参考下一节 GeckoDriver 的安装。
1.2.6 Aiohttp的安装
之前我们介绍的 Requests 库是一个阻塞式 HTTP 请求库,当我们发出一个请求后,程序会一直等待服务器的响应,直到得到响应后程序才会进行下一步的处理,其实这个过程是比较耗费资源的。如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度、响应的处理等等,那么爬取效率一定会大大提高。
Aiohttp 就是这样一个提供异步 Web 服务的库,从 Python3.5 版本开始,Python 中加入了 async/await 关键字,使得回调的写法更加直观和人性化,Aiohttp的异步操作借助于 async/await 关键字写法变得更加简洁,架构更加清晰。使用异步请求库来进行数据抓取会大大提高效率,下面我们来看一下这个库的安装方法。
2. Pip安装
推荐使用 Pip 安装,命令如下:
pip3 install aiohttp
另外官方还推荐安装如下两个库,一个是字符编码检测库 cchardet,另一个是加速 DNS 解析库 aiodns,安装命令如下:
pip3 install cchardet aiodns
3. 测试安装
安装完成之后,可以在 Python 命令行下测试。
$ python3
>>> import aiohttp
如果没有错误报出,则证明库已经安装好了。
4. 结语
我们会在后面的实例中用到这个库,比如维护一个代理池,利用异步方式检测大量代理的运行状况,极大提高效率。