参考内容:Python3 网络爬虫开发实战-崔庆才
爬虫可以简单分为几步:抓取页面,分析页面和存储数据。
在抓取页面的过程中,我们需要模拟浏览器向服务器发出请求,所以需要用到一些 Python 库来实现 HTTP 请求操作。
requests 的安装
由于 requests 属于第三方库,也就是 Python 默认不会自带这个库,所以需要我们手动安装。
相关连接
- GitHub: https://github.com/psf/requests
- PyPI: https://pypi.org/project/requests/
- 官方文档: https://requests.readthedocs.io/en/master/
- 中文文档: https://requests.readthedocs.io/zh_CN/latest/
pip 方式安装
无论是 Windows,Linux 还是 Mac,都可以通过 pip 这个包管理工具来安装。
在命令行界面中运行如下命令,即可完成 requests 库的安装:
1 | pip install requests |
Selenium 的安装
selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击,下拉等操作。对于一些 JavaScript 渲染的页面来说,这种抓取方式非常有效。
相关连接
- 官网地址: https://www.selenium.dev/
- GitHub: https://github.com/SeleniumHQ/selenium
- PyPI: https://pypi.org/project/selenium/
- 官方文档: https://www.selenium.dev/documentation/en/
- 中文文档: https://www.selenium.dev/documentation/zh-cn/
pip 方式安装
在命令行界面中运行如下命令,即可完成 requests 库的安装:
1 | pip install selenium |
ChromeDriver 的安装
前面我们安装好了 Selenium 库,但是它是一个自动化测试工具,需要浏览器来配合使用,这里就介绍一下 Chrome 浏览器以及 ChromeDriver 驱动的配置。
相关连接
- 官方地址: https://sites.google.com/a/chromium.org/chromedriver
- 下载地址: http://npm.taobao.org/mirrors/chromedriver/
准备工作
在这之前确保已经正确安装好了 Chrome 浏览器并可以正常运行,安装过程不再赘述。
查看版本
点击 Chrome 菜单 “帮助” –> “关于 Google Chrome”,即可查看 Chrome 的版本号,如下图所示:
这里我的 Chrome 版本是 80.0.3987.116,请记住 Chrome 版本号,因为选择 ChromeDriver 版本时需要用到。
下载 ChromeDriver
打开 ChromeDriver 的下载地址,可以看到所有的 ChromeDriver 版本,选择一个与 Chrome 浏览器大版本一致的版本,如下图:
每个版本都有相应的支持 Chrome 版本的介绍,请找好自己的 Chrome 浏览器版本对应的 ChromeDriver 版本再下载,否则可能无法正常工作。
找到对应的版本号后,进入文件夹下,选择自己对应平台的安装包,我这里用的是苹果系统,所以下载 chromedriver_mac64.zip ,如下图:
配置环境变量
下载完成后,将 ChromeDriver 的可执行文件配置到环境变量下。
在 Windows 下,建议直接将 chromedriver.exe 文件拖到 Python 的 Scripts 目录下。此外,也可以单独将其所在路径配置到环境变量。
在 Linux 和 Mac 下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。
例如,要将文件移动到 /usr/bin 目录。打开终端,输入如下命令:
1 | sudo mount -o rw / && killall Finder # MacOS Catalina 系统需要解锁系统目录的读写权限 |
当然,也可以将 ChromeDriver 配置到 $PATH。首先,可以先将可执行文件放到某一目录,目录可以任意选择,例如将当前可执行文件放在 /usr/local/chromedriver 目录,接下来可以修改 ~/.bash_profile 文件,相关命令如下:
1 | export PATH="$PATH:/usr/local/chromedriver" |
保存后执行如下命令:
1 | source ~/.bash_profile |
验证安装
配置完成后,就可以在命令行下直接执行 chromedriver 命令了:
1 | chromedriver |
如果输入控制台有类似如下所示输出,则证明 ChromeDriver 的环境变量配置好了
1 | chromedriver |
随后再在程序中测试。执行如下 Python 代码:
1 | from selenium import webdriver |
运行之后,如果弹出一个空白的 Chrome 浏览器,则证明所有的配置都没有问题。如果没有弹出,请检查之前的每一步配置。
如果弹出后闪退,则可能是 ChromeDriver 版本和 Chrome 版本不兼容,请更换 ChromeDriver 版本。
如果没有问题,接下来就可以利用 Chrome 来做网页抓取了。
GeckoDriver 的安装
上面我们了解了 ChromeDriver 的配置方法,配置完成之后便可以用 Selenium 驱动 Chrome 浏览器来做相应网页的抓取。
那么对于 Firefox 来说,也可以使用同样的方式完成 Selenium 的对接,这时需要安装另外一个驱动 GeckoDriver。
相关连接
- GitHub: https://github.com/mozilla/geckodriver
- 下载地址: https://github.com/mozilla/geckodriver/releases
准备工作
在这之前确保已经安装好了 Firefox 浏览器并可以正常运行,安装过程不再赘述。
下载 GeckoDriver
我们可以在 GitHub 上找到 GeckoDriver 的发行版本,当前最新版本为 0.26,下载页面如下图
这里可以选择不同的平台下载,如 Windows,Mac,Linux 等平台,我们可以根据自己的系统和位数选择对应的驱动下载。
环境变量配置
在 Windows 下,可以直接将 geckodriver.exe 文件直接拖到 Python 的 Scripts 目录下。此外,也可以单独将其所在路径配置到环境变量。
在 Linux 和 Mac 下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。
例如,要移动文件到 /usr/bin 目录。
1 | sudo mount -o rw / && killall Finder # MacOS Catalina 系统需要解锁系统目录的读写权限 |
当然,也可以将 GeckoDriver 配置到 $PATH。首先,可以先将可执行文件放到某一目录,目录可以任意选择,例如将当前可执行文件放在 /usr/local/geckodriver 目录,接下来可以修改 ~/.bash_profile 文件,相关命令如下:
1 | export PATH="$PATH:/usr/local/geckodriver" |
保存后执行如下命令:
1 | source ~/.bash_profile |
验证安装
配置完成后,就可以在命令行下直接执行 geckodriver 命令了:
1 | geckodriver |
如果无任何输出或输出两行 geckodriver 相关的版本以及监听地址与端口信息,则证明安装完成。
随后执行如下 Python 代码。在程序中测试一下:
1 | from selenium import webdriver |
运行之后,若弹出一个空白的 Firefox 浏览器,则证明所有的配置都没有问题;如果没有弹出,请检查之前的每一步配置。
如果没有问题,接下来就可以利用 Firefox 配置 Selenium 来做网页抓取了。
aiohttp 的安装
之前介绍的 requests 库是一个阻塞式 HTTP 请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理。其实,这个过程比较耗时间。如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度,响应的处理等,那么爬取效率一定会大大提高。
aiohttp 就是这样一个提供异步 web 服务的库,从 Python 3.5 版本开始,Python 中加入了 async/await 关键字,使得回调的写法更加直观和人性化。aiohttp 的异步操作借助于 async/await 关键字的写法变得更加简洁,架构更加清晰。使用异步请求库进行数据抓取时,会大大提高效率。
相关链接
- 官方文档: https://docs.aiohttp.org/en/stable/
- GitHub: https://github.com/aio-libs/aiohttp/
- PyPI: https://pypi.org/project/aiohttp/
pip 安装
这里推荐使用 pip 安装,命令如下:
1 | pip install aiohttp |
另外官方还推荐安装如下两个库:一个是字符编码检测库 cchardet,另一个是加速 DNS 的解析库 aiodns。安装命令如下:
1 | pip install cchardet aiodns |
测试安装
安装完成之后,可以在 Python 命令行下测试:
1 | python -c "import aiohttp" |