Python爬虫1.环境
看的书《Python3 网络爬虫开发实战教程》学习笔记
我光安装都快安装一下午了
python的安装我就不说了
请求库的安装
安装requests
之前介绍的 Requests 库是一个阻塞式 HTTP 请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理
Requests 项目的地址是:https://github.com/kennethreitz/requests
kali默认安装了
pip安装
1 | pip3 install requests |
安装selenium
Selenium 是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些 JavaScript 渲染的页面来说,这种抓取方式非常有效
kali默认安装了
1 | pip3 install selenium |
验证安装
安装ChromeDriver
因为只有安装 ChromeDriver,才能驱动 Chrome 浏览器完成相应的操作
先查看谷歌浏览器的版本
到这个网站去下载对应的版本
https://chromedriver.chromium.org/downloads
我的系统是linux我就下载linux的
下载好解压出来会有一个这个文件
要移动文件到 /usr/bin 目录。首先,需要在命令行模式下进入其所在路径,然后将其移动到 /usr/bin
命令
1 | mv chromedriver /usr/bin |
在终端运行chromedriver
看看有没有安装成功
应为我是root用户可能无法运行
安装GeckoDriver
那么对于 Firefox 来说,也可以使用同样的方式完成 Selenium 的对接,这时需要安装另一个驱动 GeckoDriver
在github上搜索GeckoDriver
解压出来放到/usr/bin
里面
1 | mv geckodriver /usr/bin |
在终端运行geckodriver
看看有没有安装成功
控制台输出
随后执行如下 Python 代码,在程序中测试一下:
1 | from selenium import webdriver |
可以看见成功了
安装PhantomJS
Selenium 支持 PhantomJS,这样在运行的时候就不会再弹出一个浏览器了。而且 PhantomJS 的运行效率也很高,还支持各种参数配置,使用非常方便
下载地址
https://phantomjs.org/download.html
解压出来
1 | tar -xvf 文件名 |
将程序移到一个合适的位置
我叫他移动到/opt/
文件里面叫名字改成了phantomjs
1 | mv phantomjs-2.1.1-linux-x86_64 /opt/phantomjs |
创建软链接到环境变量中。这样可以直接在shell中使用phantomjs命令:
1 | ln -sf /opt/phantomjs/bin/phantomjs /usr/local/bin/phantomjs |
查看有没有安装好我发现报错了
解决方法
1 | export OPENSSL_CONF=/etc/ssl/ |
在运行就没有报错了
验证安装
1 | from selenium import webdriver |
运行之后,我们就不会发现有浏览器弹出了,但实际上 PhantomJS 已经运行起来了。这里我们访问了百度,然后将当前的 URL 打印出来
我这个kali有个问题就是必须在这个终端上先输入export OPENSSL_CONF=/etc/ssl/
才能正常运行
安装aiohttp
之前介绍的 Requests 库是一个阻塞式 HTTP 请求库,当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理。其实,这个过程比较耗费资源。如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度、响应的处理等,那么爬取效率一定会大大提高。
aiohttp 就是这样一个提供异步 Web 服务的库,从 Python 3.5 版本开始,Python 中加入了 async
/await
关键字,使得回调的写法更加直观和人性化。aiohttp 的异步操作借助于 async
/await
关键字的写法变得更加简洁,架构更加清晰。使用异步请求库进行数据抓取时,会大大提高效率
kali默认安装了
1 | pip3 install aiohttp |
测试安装
没有报错就成功了
解析库的安装
安装lxml
lxml 是 Python 的一个解析库,支持 HTML 和 XML 的解析,支持 XPath 解析方式,而且解析效率非常高
kali默认安装了
1 | pip3 install lxml |
验证安装
安装Beautiful Soup
Beautiful Soup 是 Python 的一个 HTML 或 XML 的解析库,我们可以用它来方便地从网页中提取数据。它拥有强大的 API 和多样的解析方式
Beautiful Soup 的 HTML 和 XML 解析器是依赖于 lxml 库的,所以在此之前请确保已经成功安装好了 lxml 库
kali默认安装了
1 | pip3 install beautifulsoup4 |
验证安装
1 | from bs4 import BeautifulSoup |
运行结果如下
安装pyquery
pyquery 同样是一个强大的网页解析工具,它提供了和 jQuery 类似的语法来解析 HTML 文档,支持 CSS 选择器,使用非常方便
kali默认安装了
1 | pip3 install pyquery |
验证安装
安装tesserocr
在爬虫过程中,难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用 OCR 来识别
什么是OCR,即 Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容。
安装Python的tesserocr的库
1 | pip3 install tesserocr |
验证安装
1 | import tesserocr |
kali安装tesserocr命令
1 | apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev |
验证安装
在这个文件下载一个照片
https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png
然后运行这个命令
image.png
是下载的照片文件名
1 | tesseract image.png result -l eng && cat result.txt |
数据库的安装
可以存储我们爬下来的东西
mysql kali已经默认安装了
关闭和重启 MySQL 服务的命令如下
1 | sudo service mysql start |
数据库的安装
这个就是叫python调用数据库
我只用mysql就可以了
下载
1 | pip3 install pymysql |
Web 库的安装
Flask 是一个轻量级的 Web 服务程序,它简单、易用、灵活,这里主要用来做一些 API 服务
安装flask
kail默认安装了
1 | pip3 install flask |
验证安装
1 | from flask import Flask |
可以发现,系统会在 5000 端口开启 Web 服务,控制台输出如下
安装Tornado
Tornado 是一个支持异步的 Web 框架,通过使用非阻塞 I/O 流,它可以支撑成千上万的开放连接,效率非常高,本节就来介绍一下它的安装方式
kali默认安装了
1 | pip3 install tornado |
验证安装
1 | import tornado.ioloop |
直接运行程序,可以发现系统在 8888 端口运行了 Web 服务,控制台没有输出内容,此时访问 http://127.0.0.1:8888/,可以观察到网页中呈现了 Hello,world,如图 1-42 所示,这就说明 Tornado 成功安装了
App 爬取相关库的安装
简单来说就是抓包工具
除了 Web 网页,爬虫也可以抓取 App 的数据。App 中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于 App 没有浏览器这种可以比较直观地看到后台请求的工具,所以主要用一些抓包技术来抓取数据。
本书介绍的抓包工具有 Charles、mitmproxy 和 mitmdump。一些简单的接口可以通过 Charles 或 mitmproxy 分析,找出规律,然后直接用程序模拟来抓取了。但是如果遇到更复杂的接口,就需要利用 mitmdump 对接 Python 来对抓取到的请求和响应进行实时处理和保存。另外,既然要做规模采集,就需要自动化 App 的操作而不是人工去采集,所以这里还需要一个工具叫作 Appium,它可以像 Selenium 一样对 App 进行自动化控制,如自动化模拟 App 的点击、下拉等操作。
本节中,我们就来介绍一下 Charles、mitmproxy、mitmdump、Appium 的安装方法
安装的Charles
这个我就不安装了
安装mitmproxy
kali默认安装了
- GitHub:https://github.com/mitmproxy/mitmproxy
- 官方网站:https://mitmproxy.org
- PyPI:https://pypi.python.org/pypi/mitmproxy
- 官方文档:http://docs.mitmproxy.org
- mitmdump 脚本:http://docs.mitmproxy.org/en/stable/scripting/overview.html
- 下载地址:https://github.com/mitmproxy/mitmproxy/releases
- DockerHub:https://hub.docker.com/r/mitmproxy/mitmproxy
安装 Appium
Appium 是移动端的自动化测试工具,类似于前面所说的 Selenium,利用它可以驱动 Android、iOS 等设备完成自动化测试,比如模拟点击、滑动、输入等操作,其官方网站为:http://appium.io/。本节中,我们就来了解一下 Appium 的安装方式
- GitHub:https://github.com/appium/appium
- 官方网站:http://appium.io
- 官方文档:http://appium.io/introduction.html
- 下载链接:https://github.com/appium/appium-desktop/releases
- Python Client:https://github.com/appium/python-client
爬虫框架的安装
简单来说就是可以提升效率
我们直接用 Requests、Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久而久之,爬虫框架就诞生了。
利用框架,我们可以不用再去关心某些功能的具体实现,只需要关心爬取逻辑即可。有了它们,可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多。所以,如果有一定的基础,上手框架是一种好的选择。
本书主要介绍的爬虫框架有 pyspider 和 Scrapy。本节中,我们来介绍一下 pyspider、Scrapy 及其扩展库的安装方式
安装pyspider
1 | pip3 install pyspider |
这个问题太多了
安装Scrapy
Scrapy 是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有 Twisted 14.0、lxml 3.4 和 pyOpenSSL 0.14。在不同的平台环境下,它所依赖的库也各不相同,所以在安装之前,最好确保把一些基本库安装好。本节就来介绍 Scrapy 在不同平台的安装方法
安装依赖的库
1 | apt-get install build-essential python3-dev libssl-dev libffi-dev libxml2 libxml2-dev libxslt1-dev zlib1g-dev |
安装
1 | pip3 install Scrapy |
验证安装
在命令行下输入 scrapy
安装Scrapy-Redis
Scrapy-Redis 是 Scrapy 的分布式扩展模块,有了它,我们就可以方便地实现 Scrapy 分布式爬虫的搭建
1 | pip3 install scrapy-redis |
测试安装
1 | import scrapy_redis |
部署相关库的安装
简单来说就是分布式扫描
如果想要大规模抓取数据,那么一定会用到分布式爬虫。对于分布式爬虫来说,我们需要多台主机,每台主机多个爬虫任务,但是源代码其实只有一份。此时我们需要做的就是将一份代码同时部署到多台主机上来协同运行,那么怎么去部署就是另一个值得思考的问题。
对于 Scrapy 来说,它有一个扩展组件,叫作 Scrapyd,我们只需要安装该扩展组件,即可远程管理 Scrapy 任务,包括部署源码、启动任务、监听任务等。另外,还有 Scrapyd-Client 和 Scrapyd API 来帮助我们更方便地完成部署和监听操作。
另外,还有一种部署方式,那就是 Docker 集群部署。我们只需要将爬虫制作为 Docker 镜像,只要主机安装了 Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。
安装Docker
1 | apt install docker |
安装Scrapyd
Scrapyd 是一个用于部署和运行 Scrapy 项目的工具,有了它,你可以将写好的 Scrapy 项目上传到云主机并通过 API 来控制它的运行。
既然是 Scrapy 项目部署,基本上都使用 Linux 主机,所以本节的安装是针对于 Linux 主机的
安装
1 | pip3 install scrapyd |