请教一个问题,怎么提高 python 爬虫的爬取效率

Python015

请教一个问题,怎么提高 python 爬虫的爬取效率,第1张

一.使用开源的爬虫库scrapy,原生支持多线程,还可以设定抓取速率,并发线程数等等参数;除此之外,scrapy对爬虫提取HTML内容也有良好的支持。 二.优化方法有,开启gzip,多线程,对于定向采集可以用正则取代xpath,用pycurl代替urlib

选择Python作为实现爬虫的语言,其主要考虑因素在于:

(1) 抓取网页本身的接口

相比其他动态脚本语言(如Perl、Shell),Python的urllib2包提供了较为完整的访问网页文档的API相比与其他静态编程语言(如Java、C#、C++),Python抓取网页文档的接口更简洁。

此外,抓取网页有时候需要模拟浏览器的行为,很多网站对于生硬的爬虫抓取都是封杀的。这时我们需要模拟User Agent的行为构造合适的请求,譬如模拟用户登录、模拟Session/Cookie的存储和设置。在Python里都有非常优秀的第三方包帮你搞定,如Requests或Mechanize。

(2) 网页抓取后的处理

抓取的网页通常需要处理,比如过滤Html标签,提取文本等。Python的Beautiful Soup提供了简洁的文档处理功能,能用极短的代码完成大部分文档的处理。

其实以上功能很多语言和工具都能做,但是用Python能够干得最快、最干净,正如这句“Life is short,you need Python”。

(3) 开发效率高

因为爬虫的具体代码根据网站不同而修改的,而Python这种灵活的脚本语言特别适合这种任务。

(4) 上手快

网络上Python的教学资源很多,便于大家学习,出现问题也很容易找到相关资料。另外,Python还有强大的成熟爬虫框架的支持,比如Scrapy。

一. 关于爬虫

爬虫,是一种按照一定的规则自动地抓取互联网信息的程序。本质是利用程序获取对我们有利的数据。

反爬虫,从不是将爬虫完全杜绝;而是想办法将爬虫的访问量限制在一个可接纳的范围,不要让它过于频繁。

二. 提高爬虫效率的方法

协程。采用协程,让多个爬虫一起工作,可以大幅度提高效率。

多进程。使用CPU的多个核,使用几个核就能提高几倍。

多线程。将任务分成多个,并发(交替)的执行。

分布式爬虫。让多个设备去跑同一个项目,效率也能大幅提升。

打包技术。可以将python文件打包成可执行的exe文件,让其在后台执行即可。

其他。比如,使用网速好的网络等等。

三. 反爬虫的措施

限制请求头,即request header。解决方法:我们可以填写user-agent声明自己的身份,有时还要去填写origin和referer声明请求的来源。

限制登录,即不登录就不能访问。解决方法:我们可以使用cookies和session的知识去模拟登录。

复杂的交互,比如设置“验证码”来阻拦登录。这就比较难做,解决方法1:我们用Selenium去手动输入验证码;方法2:我们用一些图像处理的库自动识别验证码(tesserocr/pytesserart/pillow)。

ip限制。如果这个IP地址,爬取网站频次太高,那么服务器就会暂时封掉来自这个IP地址的请求。 解决方法:使用time.sleep()来对爬虫的速度进行限制,建立IP代理池或者使用IPIDEA避免IP被封禁。