Python_爬虫
Posted hazy-star
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python_爬虫相关的知识,希望对你有一定的参考价值。
爬虫介绍
一、什么是爬虫?
爬虫,学名叫网络蜘蛛,主要的功能是模拟人浏览记录网络信息,主要由三方面组成:抓取页面、分析页面和存储数据。
二、为什么常见的是Python爬虫?
其实任何语言都可以编写爬虫,但是Python有许多强大的功能库可以供我们使用,而且在数据处理方面,Python有众多方便的库可以直接调用。
三、使用Python 编写爬虫中一些常见库的介绍。
本部分主要介绍一些常用的库,让大家对爬虫总体有个初步的了解,以及知道解决什么问题,可以调用哪些库,对于具体库的安装使用,可参考官方文档或者崔庆才的博客:https://cuiqingcai.com/
抓取页面:
实现HTTP请求操作:
Selenium
Github:https://github.com/SeleniumHQ/selenium/tree/master/py
官方文档:http://selenium-python.readthedocs.io
中文版:http://selenium-python-zh.readthedocs.io
Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些javascript渲染的页面来说,这种
抓取方式非常有效。
Requests
Github:https://github.com/requests/requests
官方文档:http://www.python-requests.org
中文文档:http://docs.python-requests.org/zh_CN/latest
Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的
编码,支持国际化的 URL 和 POST 数据自动编码。
aiohttp
Github:https://github.com/aio-libs/aiohttp
官方文档:http://aiohttp.readthedocs.io/en/stable
提供异步Web服务的库,自动化测试工具,需要浏览器来配合使用;ChromeDriver驱动Chrome浏览器;GeckoDrive驱动Firefox浏览器。
分析页面:
从网页中提取信息。提取信息的方式有多种多样,可以使用正则来提取,但是写起来相对比较烦琐。这里还有许多强大的解析库,如lxml、Beautiful Soup、pyquery等。此外,还
提供了非常强大的解析方法,如XPath解析和CSS选择器解析等,利用它们,我们可以高效便捷地从网页中提取有效信息。
lxml是Python的一个解析库,支持html和XML的解析,支持XPath解析方式,而且解析效率非常高。
GitHub:https://github.com/lxml/lxml
pyquery同样是一个强大的网页解析工具,它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便。
GitHub:https://github.com/gawel/pyquery
官方文档:http://pyquery.readthedocs.io
验证码:
OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。对于图形验证码来说,它们都
是一些不规则的字符,这些字符确实是由字符稍加扭曲变换得到的内容
tesserocr是Python的一个OCR识别库,但其实是对tesseract做的一层Python API封装,所以它的核心是tesseract。因此,在安装tesserocr之前,我们需
要先安装tesseract。
GitHub:https://github.com/sirfz/tesserocr
下载地址:http://digi.bib.uni-mannheim.de/tesseract
GitHub:https://github.com/tesseract-ocr/tesseract
tesseract语言包:https://github.com/tesseract-ocr/tessdata
tesseract文档:https://github.com/tesseract-ocr/tesseract/wiki/Documentation
存储数据:
作为数据存储的重要部分,数据库同样是必不可少的,数据库可以分为关系型数据库和非关系型数据库。
关系型数据库如SQLite、mysql、Oracle、SQL Server、DB2等,其数据库是以表的形式存储
MySQL: MySQL是一个轻量级的关系型数据库
非关系型数据库如MongoDB、Redis,它们的存储形式是键值对,存储形式更加灵活。
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以
包含 其他文档、数组及文档数组,非常灵活。
Redis是一个基于内存的高效的非关系型数据库
存储数据的数据库提供存储服务,但如果想要和Python交互的话,还需要安装一些Python存储库,如MySQL需要安装PyMySQL,MongoDB需要安
装PyMongo等。RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,所以要安装RedisDump,需要先安装Ruby。
对于大规模爬虫构建与非Web网页爬虫使用到的技术:
Web服务程序来搭建一些API接口,供爬虫使用。如:Flask和Tornado。
Flask是一个轻量级的Web服务程序,它简单、易用、灵活,这里主要用来做一些API服务。
Tornado是一个支持异步的Web框架,通过使用非阻塞I/O流,它可以支撑成千上万的开放连接,效率非常高。
抓取App的数据,App中的页面要加载出来,首先需要获取数据,而这些数据一般是通过请求服务器的接口来获取的。由于App没有浏览器这种可以比较直观地
看到后台请求的工具,所以主要用一些抓包技术来抓取数据。本书介绍的抓包工具有Charles、mitmproxy和mitmdump。一些简单的接口可以通过Charles
或mitmproxy分析,找出规律,然后直接用程序模拟来抓取了。但是如果遇到更复杂的接口,就需要利用mitmdump对接Python来对抓取到的请求和响应进
行实时处理和保存。另外,既然要做规模采集,就需要自动化App的操作而不是人工去采集,所以这里还需要一个工具叫作Appium,它可以像Selenium一
样对App进行自动化控制,如自动化模拟App的点击、下拉等操作。
Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,所以这里选用它来作为主要的移动端抓包工具。
mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作。
Appium是移动端的自动化测试工具,类似于前面所说的Selenium,利用它可以驱动android、ios等设备完成自动化测试,比如模拟点击、滑动、输入
等操作,官方网站为:http://appium.io/。
框架的使用:
直接用Requests、Selenium等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复
用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久而久之,爬虫框架就诞生了。利用框架,我们可以不用再去关心某
些功能的具体实现,只需要关心爬取逻辑即可。有了它们,可以大大简化代码量,而且架构也会变得清晰,爬取效率也会高许多。所以,如果有一定的基础,
上手框架是一种好的选择。本书主要介绍的爬虫框架有pyspider和Scrapy。
pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时支持多种数据库
后端、多种消息队列,另外还支持JavaScript渲染页面的爬取,使用起来非常方便。
Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted 14.0、lxml 3.4和pyOpenSSL 0.14。在不同的平台环境下,它所依赖
的库也各不相同,所以在安装之前,最好确保把一些基本库安装好。
Scrapy-Splash是一个Scrapy中支持JavaScript渲染的工具。Scrapy-Splash的安装分为两部分。一个是Splash服务的安装,具体是通过Docker,安装之
后,会启动一个Splash服务,我们可以通过它的接口来实现JavaScript页面的加载。
另外一个是Scrapy-Splash的Python库的安装,安装之后即可在Scrapy中使用Splash服务。
Scrapy-Redis是Scrapy的分布式扩展模块,有了它,我们就可以方便地实现Scrapy分布式爬虫的搭建。
分布式:
对于Scrapy来说,它有一个扩展组件,叫作Scrapyd,我们只需要安装该扩展组件,即可远程管理Scrapy任务,包括部署源码、启动任务、监听任务等。另外,还有
Scrapyd-Client和Scrapyd
API来帮助我们更方便地完成部署和监听操作。
Docker集群部署。我们只需要将爬虫制作为Docker镜像,只要主机安装了Docker,就可以直接运行爬虫,而无需再去担心环境配置、版本问题。
Scrapyrt为Scrapy提供了一个调度的HTTP接口,无需执行Scrapy命令而是通过请求一个HTTP接口来调度Scrapy任务了。Scrapyrt比Scrapyd更轻量,如果不需要分布式多
任务的话,可以简单使用Scrapyrt实现远程Scrapy任务的调度。
Gerapy是一个Scrapy分布式管理模块
四、总结
本文主要介绍了什么是爬虫,以及爬虫要实现的功能,还有一些常见的爬虫实现会涉及到的库。初次之外,因为爬虫涉及到的是网站数据的下载分析以及APP抓包数据分析,此部分内容后续另行补偿。
2019-05-16
以上是关于Python_爬虫的主要内容,如果未能解决你的问题,请参考以下文章
2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具