网络爬虫实践,各种库的功能及爬虫的解析库
爬虫步骤一般分为三个步骤:抓取页面,分析页面,存储数据

其中对于我们而言最重要的就是反爬了,下面为大家介绍python爬虫各种相关的库,以便大家详细了解爬虫的整体架构及思想
1、常见库的基本介绍

(1)请求库:实现http请求操作
requests:阻塞式http请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理,耗时间,在等待期间做其他事,如请求的调度,响应的处理,提高爬虫效率,由此产生了aiohttp

selenium:自动化测试工具,可以利用它驱动浏览器执行特地的动作,如点击,下拉,特别对于一些js渲染的页面,这种抓取十分有效,以下三种浏览器的对接方式。

ChromeDriver:浏览器驱动插件,驱动浏览器执行相应的操作,这个还需要配置相关的环境变量。                  火狐浏览器需要安装GeckoDriver插件驱动。p13
phantomJS:一个无界面的,可脚步编程的webkit浏览器引擎,它原生支持多种web标准:dom操作,css选择器,json,canvas以及SVG。selenium支持phantomJS

aiohttp:提供异步的web服务的库,其的异步操作借助于async/await关键字,使用异步库进行数据抓取,可以大大提高效率。

(2)解析库:从网页中提取信息,正则表达式写起来比较繁琐,所以产生了许多强大的解析库
lxml:支持html和XML的解析,支持Xpath解析方式(bs和scrapy框架都需要此库)。

bs:html和XML的解析,从网页中提取信息,同时拥有强大的API和多样解析方式。

pyquery:提供类似jquery的语法来解析html文档,支持css选择器。

tesserocr:遇到的验证码,大多数是图形验证码,这时我们可以直接用OCR来识别。
OCR(optical character recognition)光学字符识别,扫描字符,通过其形状将其翻译成电子文本的过程(tesserocr是python中的一个OCR识别库,是对tesseract做的一层python API封装,其核心是tesseract(宇宙魔方),所以应该先安装核心库)。

 

(3)常见的各种数据库的介绍

mysql:轻量级关系型数据库

mongodb:使用c++编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其存储内容形式类似于json对象。(可视化工具robomongo/robo 3t,studio 3t

redis:一个基于内存的高效的非关系型数据库(可视化工具:redis desktop manager)。

(4)存储库:数据库与python的交互需要安装python存储库
mysql需要安装pymysql,
mongodb需要安装pymongo
redisdump是一个用于redis数据导入/导出的工具,基于ruby 实现的,要安装它,需要先安装 ruby。

(5)web库的安装
web服务程序:flask和Django,可以用它开发网站和接口
可以使用web服务程序搭建API接口,供爬虫使用,例如,维护代理池,代理保存在redis数据库中,将代理池作为一个公共的组件使用,通过web构建一个API接口,只需要请求接口即可获取新的代理。
flask:轻量级的web服务程序,简单,易用,灵活,主要来做一些API服务。
tornAdo:一个支持异步的web框架,通过使用非阻塞I/O流,它可以支撑成千上万的开放连接,效率高。
可以利用tornado+redis搭建一个ADSL拨号代理池。


(6)app爬取相关库的安装
除爬取web网页,也可以抓取app的数据,app的数据要加载出来,首先获取数据,而这些数据一般是通过请求服务器的接口来获取的,由于app没有浏览器这种可以直观的看到后台请求的工具,所以主要用一些抓包技术来抓取数据。
抓包工具:Charles,mitmproxy,mitmdump。
简单的接口通过前两个分析找规律,直接用程序模拟来抓取,
复杂的接口利用mitmdump对接来对抓取到的请求和响应进行实时的处理和保存。
规模采集,需自动化app的操作而不是人工去采集,因此还需要一个工具叫

appium:可以像selenium一样对app进行自动化控制,如自动模拟app的点击下拉等操作。

Charles:一个网络抓包工具,相比fiddler,功能更强大,跨平台支持得更好,作为主要的移动端抓包工具。若 app采用https协议,通信数据被加密,常规的截包方法无法识别请求内部的数据,需要配置相关的ssl证书并开启ssl监听

mitmproxy:一个支持http和https的抓包程序,类似于fiddler,Charles的功能,只不过它通过控制台的形式操作。它有两个相关组件,mitmdump是它的命令行接口,实现与python脚本的对接,实现监听后的处理,另一个是mitmweb,这是一个web程序,通过它可以清楚的观察到mitmproxy捕获的请求。需要证书配置。

appium:移动端的自动化测试工具,利用它可以驱动Android,iOS等设备完成自动化测试,比如模拟点击,滑动,输入等操作。(一般android进行测试)


(7)爬虫框架的安装
主要有pyspider,scrapy及其扩展库

pyspider:具有强大的web UI,脚本编辑器,任务监控器,项目管理器以及结果处理器,同时支持多种数据库后端,多种消息队列,另外还支持js渲染页面的爬取(而这个过程是依赖于phantomjs(需要先安装)的。验证:pyspider all,直接浏览器进http://localhost:5000/,可以进入pyspider的web UI管理页面

Scrapy:依赖的库比较多,至少依赖twisted,lxml,pyopenSSL,在不同的平台依赖的库也各不相同,验证:scrapy

Scrapy-Splash:是一个scrapy中支持js渲染的工具(需要先安装好docker)安装docker后启动一个splash服务,通过他的接口实现js页面的加载,。另一个是scrapy-splash的python库的安装,安装之后可在scrapy中使用splash(使用http API进行页面渲染)服务。

scrapy-redis:是scrapy的分布式扩展模块,实现scarpy的分布式爬虫的搭建,


(8)部署相关库的安装
大规模数据的分布式爬虫,多台主机,每台主机多个爬虫任务,但是只有一份源码,部署多台主机协同运行,

scrapyd:scrapy的一个扩展组件,可远程管理scrapy任务,包括部署源码,启动任务,监听任务。另外,还有scrapy-client和scrapyd API(p74)来帮助完成部署和监听操作。
一个用于部署和运行scrapy项目的工具,可以将项目上传到云主机并通过API来控制它的运行。(基本都使用Linux主机)

docker集群部署:将爬虫制作为docker镜像,只要安装,可以直接运行爬虫,无需担心环境配置和版本问题。

docker:是一种容器技术,可以将应用和环境打包,形成一个独立的类似于app形式的应用。docker是一种最流行的容器化实现方案,和虚拟化技术类似,极大方便了应用服务的部署,又与虚拟技术不同,它以更轻量的方式实现了应用服务的打包。使用docker,可以使应用彼此隔离,在同一台机器同时运行多个应用,但是彼此之间共享
一个操作系统。docker的优势在于,可以在更细的粒度上进行资源管理,也比虚拟化技术更加节约资源。一般大规模部署爬虫系统,使用docker会大大提高效率。

scrapyrt:为scrapy提供一个调度的http接口,有了它,就不需要再执行scrapy命令而是通过一个http接口来调度scrapy任务了,比scrapyd更轻量,如果不需要分布式多任务的话,可以简单的使用scrapyrt实现远程scrapy任务的调度。也支持docker

Gerapy:一个scrapy分布式管理模式