01 爬虫_环境搭建

参考 《Python 3网络爬虫开发实战 》崔庆才著

请求库的安装

python3

官方网站:https://python.org
下载地址;https://www.python.org/downloads
第三方库:https://pypi.python.org/pypi
官方文档:https://docs.python.org/3
中文教程:https://www.runoob.com/python3/python3–tutorial.html (菜鸟教程)
AwesomePython:https://github.com/vinta/awesome-python
AwesomePython中文版:https://github.com/jobbole/awesome-python-cn

爬虫可以简单分为几步:抓取页面、分析页面和存储数据。
在抓取页面的过程中,我们需要模拟浏览器向服务器发出请求,所以需要用到一些 Python库来实HTTP请求操作。在本书中,我们用到的第三方库有requests、Selenium和aiohttp等。
使用pip install *****进行安装

requests

Github:https://github.com/requests/requests
Pypl:https://pypi.python.org/pypi/requests
官方文档:http://www.python-requests.org
中文文档:http://docs.python-requests.org/zh_CN/latest

image-20210227170925047

Selenium

Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些 JavaScript渲染的页面来说,这种抓取方式非常有效。下面我们来看看 Selenium的安装过程

官方网站:http://www.seleniumhq.org

Github:https://github.com/SeleniumHQ/selenium/tree/master/py

Pypi:https://pypi.python.org/pypi/selenium

官方文档:http://selenium-python.readthedocs.io

中文文档:http://selenium-python-zh.readthedocs.io

ChromeDriver驱动

配合自动化测试工具selenium使用

官方网站:https://sites.google.com/a/chromium.org/chromedriver
下载地址:https://chromedriver.storage.googleapis.com/index.html

  1. 安装chrome浏览器,然后查看chrome版本号
    image-20210227172514221

    查看版本号为 88

  2. 打开ChromeDriver的官网,寻找支持chrome版本号为88的ChromeDriver版本,
    到上述中的下载地址得知匹配chromedriver版本为
    image-20210227173521867

    根据系统选择对应版本,更多信息可查看notes.txt

  3. 配置环境变量
    将下载的文件解压缩得到可执行文件,Windows下可直接将其放入Python的Scripts目录下
    image-20210227174038798

    上图中我放入的是venv虚拟环境中的Scripts目录下,也可以单独将其所在路径配置到环境变量。
    若要使用venv中的插件,需要在Scripts目类下使用activate命令进入venv环境中。

    再使用chromedriver运行

  4. 验证是否成功

    from selenium import webdriver
    browser = webdriver.Chrome()
    

    执行该.py文件
    运行之后,如果弹出一个空白的 Chrome浏览器,则证明所有的配置都没有问题。如果没有弹出,请检查之前的每一步配置。
    如果弹出后闪退,则可能是 Chrome Driver版本和 Chrome版本不兼容,请更换 ChromeDriver版本。
    如果没有问题,接下来就可以利用 Chrome来做网页抓取了。

GeckoDriver安装

这是应用于Firefox的驱动

Github:https://github.com/mozilla/geckodriver
下载地址:https://github.com/mozilla/geckodriver/releases

寻找对应的版本,如上进行下载安装,同样将其压缩包文件解压后得到的可执行文件放入Scripts目录

使用

from selenium import webdriver
browser = webdriver.Firefox()

验证

PhantomJS

PhantomJS是一个无界面的、可脚本编程的 Webkit浏览器引擎,它原生支持多种web标准:DOM操作、CSS选择器、JSON、 Canvas以及SVG。
Selenium支持 PhantomJS,这样在运行的时候就不会再弹出一个浏览器了。而且 PhantomJS的运行效率也很高,还支持各种参数配置,使用非常方便。下面我们就来了解一下 Phantom的安装过程

官方网站:http://phantomjs.org
官方文档:http://phantomjs.org/quick-start.html
下载地址:http://phantomjs.org/download.html
API接口说明:http://phantomjs.org/api/command-line.html

到下载地址中下载对应操作系统的版本,解压得到可执行文件phantomjs.exe放入venv虚拟环境中的Scripts目录下,也可加入环境变量中。
如使用配置环境变量的方法,可直接在命令行中使用phantomjs命令验证是否配置成功
如放入的Scripts目录下需先激活虚拟环境(使用activate)

在Selenium中使用

from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('https://www.baidu.com')
print(browser.current_url)

会warning:
UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '

警告 PhantomJS已经被弃用了,现在使用的是Firefox和chrome浏览器。

aiohttp

之前介绍的 requests库是一个**阻塞式HTTP请求库,**当我们发出一个请求后,程序会一直等待服务器响应,直到得到响应后,程序才会进行下一步处理。其实,这个过程比较耗费时间。如果程序可以在这个等待过程中做一些其他的事情,如进行请求的调度、响应的处理等,那么爬取效率一定会大大提高。

aiohttp就是这样一个提供异步web服务的库,从Python3.5版本开始,Python中加入了async/await关键字,使得回调的写法更加直观和人性化。aiohttp的异步操作借助于async./await关键字的写法变得更加简洁,架构更加清晰。使用异步请求库进行数据抓取时,会大大提高效率,下面我们来看一下这个库的安装方法。

官方文档:https://aiohttp.readthedocs.io/en/stable
Github:https://github.com/aio-libs/aiohttp
Pypi:https://pypi.python.org/pypi/aiohttp

使用pip install aiohttp安装(注意是否安装在虚拟环境中)

另外,官方还推荐安装如下两个库:一个是字符编码检测库 cchardet,另一个是加速DNS的解析库 aiodns。安装命令如下:
pip install cchardet aiodns

我们会在后面的实例中用到这个库,比如维护代理池时,利用异步方式检测大量代理的运行状况,会极大地提升效率

解析库的安装

抓取网页代码之后,下一步就是从网页中提取信息。提取信息的方式有多种多样,可l以使用正则来提取,但是写起来相对比较烦琐。这里还有许多强大的解析库,如lxml、 Beautiful Soup、 pyquery等。此外,还提供了非常强大的解析方法,如ⅹPath解析和CSS选择器解析等,利用它们,我们可以高效便捷地从网页中提取有效信息本节中,我们就来介绍一下这些库的安装过程。

lxml

xm是 Python的一个解析库,支持HTML和XML的解析,支持 XPath解析方式,而且解析效率非常高。本节中,我们了解一下lxml的安装方式。

官方网站:http://lxml.de
Github:https://github.com/lxml/lxml
Pypi:https://pypi.python.org/pypi/lxml

windows下使用pip install lxml安装

Beautiful Soup

Beautiful Soup是 Python的一个HTML或XML的解析库,我们可以用它来方便地从网页中提取数据。它拥有强大的API和多样的解析方式。

官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc
中文文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh
Pypi:https://pypi.python.org/pypi/beautifulsoup4

Beautiful Soup的HML和XML解析器是依赖于lxm库的,所以在此之前请确保已经成功安装好了lxm库,具体的安装方式参见上节。

pip install beautifulsoup4安装

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>hello</p>', 'lxml')
print(soup.p.string)

注意,这里我们虽然安装的是 beautifulsoup4这个包,但是在引入的时候却是bs4.这是因为这个包源代码本身的库文件夹名称就是bs4,所以安装完成之后,这个库文件夹就被移入到本机 Python3的b库里,所以识别到的库文件名就叫作bs4因此,包本身的名称和我们使用时导入的包的名称并不一定是一致的。

pyquery

pyquery同样是一个强大的网页解析工具,它提供了和 jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便。本节中,我们就来了解一下它的安装方式。

Github:https://github.com/gawel/pyquery
Pypi:https://pypi.python.org/pypi/pyquery
官方文档:https://pyquery.readthedocs.io

pip install pyquery

tesserocr

在爬虫过程中,难免会遇到各种各样的验证码,而大多数验证码还是图形验证码,这时候我们可以直接用OCR来识别。

OCR,即 Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都是一些不规则的字符,这些字符确实是由字

tesserocr是 Python的一个OCR识别库,但其实是对 tesseract做的层 Python API封装,所以它的核心是 tesseract,因此,在安装 tesseract前,我们需要先安装 tesseract。

tesserocr Github:https://github.com/sirfz/tesserocr
tesserocr Pypi:https://pypi.python.org/pypi/tesserocr
tesseract下载地址:http://digi.bib.uni-mannheim.de/tesseract
tesseract Github:https://github.com/tesseract-ocr/tesseract
tesseract 语言包:https://github.com/tesseract-ocr/tessdata
tesseract 文档:https://github.com/tesseract-ocr/tesseract/wiki/documentation

进入下载地址,带有dev的是开发版本,不带dev的为稳定版本。
点击下载的文件,选择安装OCR识别支持的语言包
接下来安装tesserocr即可pip install tesserocr pillow

如果使用pip安装出现异常,可以选择wheel安装
下载tesserocr _whl文件
在下载路径使用 pip install 文件名

  • 验证
    img

  • 下载图片保存

    import tesserocr
    from PIL import Image
    image = Image.open('文件目录+文件名')
    print(tesserocr.image_to_text(image))
    
    

    如果报错raceback (most recent call last):
    File “”, line 1, in
    File “tesserocr.pyx”, line 2443, in tesserocr._tesserocr.image_to_text
    RuntimeError: Failed to init API, possibly an invalid tessdata path: D:\python_pro\graduation\venv\Scripts/tessdata/

Tesseract-OCR安装目录下的tessdata文件夹复制到上述报错中的‘path’中,即D:\python_pro\graduation\venv\Scripts

正常则输出Python3WebSpider

此外还可以使用
print(tesserocr.file_to_text('文件路径+名称'))

数据库的安装

关系型数据库如 SQLite、 MySQL、 Oracle、 SQL Server、DB2等,其数据库是以表的形式存储longoDB、 Redis,它们的存储形式是键值对,存储形式更加灵活。

mysql

mongoDB

MongoDB是由C+语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。
MongoDB支持多种平台,包括 Windows、 linux、 Mac OS、 Solaris等,在其官方网站(htps/www ngodb. com/download-center)均可找到对应的安装包。

这里推荐一个可视化工具 RoboMongo/Robo 3T,它使用简单,功能强大,官方网站为https://robomongo.org/,三大平台都支持,下载链接为https://robomongo.org/download

另外,还有一个简单易用的可视化工具—Studio 3T,它同样具有方便的图形化管理界面,官方网站为https://studio3t.com,同样支持三大平台,下载链接为https://studio3t.com/download

Redis

Redis是一个基于内存的高效的非关系型数据库,本节中我们来了解一下它在各个平台的安装过程

官方网站:https://redis.io
官方文档:https://redis.io/documentation
中文官网:http://www.redis.cn
Github:https://github.com/antirez/redis
中文教程:http://www.runoob.com/redis/redis-tutorial.html Redis Desktop Manager:https://redisdesktop.com
Redis Desktop Manager Github:https://github.com/uglide/redisdesktopmanager

  • windows 安装

    在Windows下,Redis可以直接到GitHub的发行版本里面下载,具体下载地址

存储库的安装

如果想要和 Python交互的话,还需要安装一些 Python存储库,如 MySQL需要安装PyMySQL, MongoDB需要安装 PyMongo,Redis需要安装redis-py等。本节中,我们来说明一下这些存储库的安装方式。

pymysql

Github:https://github.com/pymysql/pYmysql
官方文档:https://pymysql.readthedocs.io/
Pypi:https://pypi.pythonorg/pypi/pymysql

pip install pymysql

pyMongo

Github:https://github.com/mongodb/mongo-python-driver
官方文档:https://api.mongodb.com/python/current
Pypl:https://pypipython.org/pypi/pymongo

pip install pymongo

redis-py

Github:https://github.com/andymccurdy/redis-py
官方文档:https://redis-py.readthedocs.io

pip install redis

RedisDump

Redis Dump是一个用于 Redis数据导人/导出的工具,是基于Ruby实现的,所以要安装 Redis Dump,需要先安装Ruby

Github:https://github.com/delano/redis-dump
官方文档:https://delanotes.com/redis-dump

  • 有关Ruby的安装方式可以参考http://www.ruby-lang.org/zh_cn/documentation/installation,这里列出了所有平台的安装方式,可以根据对应的平台选用合适的安装方式。

    image-20210307110150606
    ps:注意在Windows下使用RubyInstallers安装时需要确认安装包(带devkit)的,否正后续使用gem会报错
    ERROR: Error installing redis-dump:
    ERROR: Failed to build gem native extension

  • gem安装

    安装完成之后,就可以执行gem命令了,它类似于 Python中的pip命令。利用gem命令,我们可以安装 RedisDump,具体如下gem install redis-dump

  • 4.验证安装

    安装成功后,就可以执行如下两个命令:
    redis-dump
    redis-load,
    如果可以成功调用,则证明安装成功。

web安装

在本书中,我们主要使用这些Web服务程序来搭建一些API接口,供我们的爬虫使用。例如,维护一个代理池,代理保存在 Redis数据库中,我们要将代理池作为一个公共的组件使用,那么如何构建一个方便的平台来供我们获取这些代理呢?最合适不过的就是通过Web服务提供一个AP接口,我们只需要请求接口即可获取新的代理,这样做简单、高效、实用!
书中用到的一些Web服务程序主要有 Flask和 Tornado,这里就分别介绍它们的安装方法

flask

Github:https://github.com/pallets/flask
官方文档:http://flask.pocoo.org
中文文档:http://docs.jinkan.org/docs/flask
Pypi:https://pypl.python.org/pypi/flask

from flask import Flask
app = Flask(__name__)


@app.route("/")
def hello():
    return "hello"


if __name__ == '__main__':
    app.run()

使用以上代码验证flask是否安装成功。
后续利用Flask+Redis维护动态代理池和cookies池

Tornado

Tornado是一个支持异步的Web框架,通过使用非阻塞LO流,它可以支撑成千上万的开放连接效率非常高,本节就来介绍一下它的安装方式

Github:https://github.com/tornadoweb/tornado
Pypl:https://pypi.python.org/pypi/tornado
官方文档:http://www.tornadoweb.org

import tornado.ioloop
import tornado.web


class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("hello world")


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

控制台没有输出内容 ,但在浏览器打开127.0.0.1:8888 发现运行了web服务。

后面将会使用tornado+Redis搭建ADSL拨号代理池。

APP爬取相关库的安装

除了Web网页,爬虫也可以抓取App的数据。App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于App没有浏览器这种可以比较直观地看到后台请求的工具,所以主要用一些抓包技术来抓取数据。

本书介绍的抓包工具有 Charles、 mitmproxy和 mitmdump。一些简单的接口可以通过 Charles或mitmproxy分析,找出规律,然后直接用程序模拟来抓取了。但是如果遇到更复杂的接口,就需要利用 mitmdump对接 Python来对抓取到的请求和响应进行实时处理和保存。另外,既然要做规模采集,就需要自动化App的操作而不是人工去采集,所以这里还需要一个工具叫作 Apium,它可以像Selenium一样对App进行自动化控制,如自动化模拟App的点击、下拉等操作。

Charles(查尔斯)

Charles是一个网络抓包工具,相比 Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具

官方网站:https://www.charlesproxy.com
下载链接;https://www.charlesproxy.com/download

  • 证书配置

    现在很多页面都在向 Https方向发展, Https通信协议应用得越来越广泛。如果一个Ap通信应用了 Https协议,那么它通信的数据都会是被加密的,常规的截包方法是无法识别请求内部的数据的。
    安装完成后,如果我们想要做HTPS抓包的话,那么还需要配置一下相关SSL证书。接下来我们再看看各个平台下的证书配置过程。
    Charles是运行在PC端的,我们要抓取的是App端的数据,所以要在Pc和手机端都安装证书。

    进入charle ->Help->SSL Proxying->Install Charles Root Certificate

mitmproxy

mitmproxy是一个支持HTTP和HTPS的抓包程序,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作。
此外, mitmproxy还有两个关联组件,一个是 mitmdump,它是 mitmproxy的命令行接口,利用它可以对接 Python脚本,实现监听后的处理;另一个是 mitmweb,它是一个Web程序,通过它以清楚地观察到 mitmproxy捕获的请求。

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

使用 pip install mitmproxy

Appium

首先,需要安装 Apium. Apium负责驱动移动端来完成一系列操作,对于iOs设备来说,它使用苹果的 AUTomation来实现驱动;对于 Android来说,它使用 UIAutomator和 Selendroid来实现驱动。
同时 Apium也相当于一个服务器,我们可以向它发送一些操作指令,它会根据不同的指令对移动设备进行驱动,以完成不同的动作。
安装 Apium有两种方式,一种是直接下载安装包 Appium Desktop来安装,另一种是通过 Node. js来安装,下面我们介绍一下这两种安装方式。

爬虫框架的安装

我们直接用 requests, Selenium等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来将各个功能模块化,就慢慢会形成一个框架雏形,久而久之,爬虫框架就诞生了。
利用框架,我们可以不用再去关心某些功能的具体实现,只需要关心爬取逻辑即可。有了它们,可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多。所以,如果有一定的基础,上手框架是一种好的选择。
本书主要介绍的爬虫框架有 spider和 Scrap。本节中,我们来介绍一下 spider、 Scrap及其扩展库的安装方式

pyspider

象 spider是国人binx编写的强大的网络爬虫框架,它带有强大的webU、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时支持多种数据库后端、多种消息队列,另外还支持 Javascript渲染页面的爬取,使用起来非常方便,本节介绍一下它的安装过程

官方文档:http://docs.pyspider.org
Pypi:https://pypi.python.org/pypi/pyspider
Github:https://github.com/binux/pyspider
官方教程:http://docs.pyspider.org/en/latest/tutorial
在线实例:http://demo.pyspider.org

使用 pip install pyspider安装

ps:如果报错Command “python setup.py egg_info” failed with error code 10 in C:\Users\22770\AppData\Local\Temp\pip-install-h172jpzy\pycurl\

这是 PyCurl安装错误,此时需要安装PyCurl库
找到对应的 Python版本,然后下载相应的whel文件即可。比如 Windows64位、 Python3.6,则需要下载 pycurl-7.43.0-cp36-cp36m-win_amd64whl,随后用pip安装即可

Scrapy

Scrap是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有 Twisted40、xml34和 pyOpenSSL0.4.在不同的平台环境下,它所依赖的库也各不相同,所以在安装之前,最好确保把些基本库安装好。本节就来介绍 Scrap在不同平台的安装方法。

官方网站:https://scrapy.org
官方文档:https://docs.scrap.org
Pypi:https://pypi.pythonorg/pypi/scrapy
github:https://github.com/scrapy/scrapy
中文文档:http://scrapy-chs.readthedocs.io

需要先安装 lxml、pyOpenSSLTwistedPyWin32

ps:pywin32的安装包为.exe,如果在venv环境安装,则在venv环境中使用
easy_install pywin32-221.win-amd64-py3.6.exe即可安装到venv中

Scrapy- Splash的安裝

Scrapy-Splash是一个 Scrap中支持 JavaScript渲染的工具,本节来介绍它的安装方式。
Scraps- Splash的安装分为两部分。
一个是 Splash服务的安装,具体是通过 Docker,安装之后,会启动一个 Splash服务,我们可以通过它的接口来实现 JavaScript页面的加载。
另外一个是 Scrapy-Splash的 Python库的安装,安装之后即可在 Scrap中使用 Splash服务。

Github:https://github.com/scrapy-plugins/scrapy-splash
Pypi:https://pypi.python.org/pypi/scrapy-splash
使用说明:https://github.com/scrapy-plugins/scrapy-splash#configuration
Splash官方文档:http://splash.readthedocs.io

安装Splash

Scrapy-Splash会使用 Splash的 Http Ap进行页面渲染,所以我们需要安装 Splash来提供渲染服务。这里通过 Docker安装,在这之前请确保已经正确安装好了 Docker

部署相关库

如果想要大规模抓取数据,那么一定会用到分布式爬虫。对于分布式爬虫来说,我们需要多台主机,每台主机有多个爬虫任务,但是源代码其实只有一份。此时我们需要做的就是将一份代码同时部署到多台主机上来协同运行,那么怎么去部署就是另一个值得思考的问题
对于 Scrap来说,它有一个扩展组件,叫作 Scraped,我们只需要安装该扩展组件,即可远程管理 Scrap任务,包括部署源码、启动任务、监听任务等。另外,还有 Scrapyd-Client和 Scrapyd API来帮助我们更方便地完成部署和监听操作。
另外,还有一种部署方式,那就是 Docker集群部署。我们只需要将爬虫制作为 Docker镜像,只要主机安装了 Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。
本节中,我们就来介绍相关环境的配置过程。

Docker

Docker是一种容器技术,可以将应用和环境等进行打包,形成一个独立的、类似于ios的App形式的“应用”。这个应用可以直接被分发到任意一个支持 Docker的环境中,通过简单的命令即可启动运行。
Docker是一种最流行的容器化实现方案,和虚拟化技术类似,它极大地方便了应用服务的部署;又与虚拟化技术不同,它以一种更轻量的方式实现了应用服务的打包。使用 Docker,可以让每个应用彼此相互隔离,在同一台机器上同时运行多个应用,不过它们彼此之间共享同一个操作系统。
Docker的优势在于,它可以在更细的粒度上进行资源管理,也比虚拟化技术更加节约资源对于爬虫来说,如果我们需要大规模部署爬虫系统的话,用 Docker会大大提高效率。工欲善其事,必先利其器。

官方网站:https://www.docker.com
Github:https://github.com/docker
DockerHub:https://hub.docker.com
官方文档:https://docs.docker.com
Daocloud:http://www.daocloud.io
中文社区:http://www.docker.org.cn
中文教程:http://www.runoob.com/docker/docker-tutorial.html
推荐图书:https://easy.gitbooks.io/docker_practice

windows10安装docker

Scrapyd

Scraped是一个用于部署和运行 Scrap项目的工具,有了它,你可以将写好的 Scrap项目上传到云主机并通过AP来控制它的运行。
既然是 Scrap项目部署,基本上都使用 Linux主机,所以本节的安装是针对于 Linux主机的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值