您当前的位置:首页 > 生活 > 内容

python爬虫8个常用的爬虫技巧分析总结图_Python爬虫8个常用的爬虫技巧分析总结

python爬虫8个常用的爬虫技巧分析总结图_Python爬虫8个常用的爬虫技巧分析总结

Python用了快一年了,应用最广泛的场景是web快速开发,爬虫和自动化运维:写简单的网站,写自动发帖脚本,收发邮件,写简单的验证码识别脚本。

爬虫在开发过程中也有很多复用过程。这里总结一下,以后可以省点事。

1、基本网页抓取

获取方法

导入URL lib 2 URL ' http://www . Baidu . com ' respons=URL lib 2 . urlopen(URL)print response . read()

过帐方法

import urlli import URL lib 2 URL=' http://abcde . com ' form={ ' name '' ABC '' password '' 1234 ' } form _ data=urllib . urlencode(form)request=urllib 2。Request(url,form _ data)response=URL lib 2 . URL open(request)print response . read()

2、使用代理IP

在开发爬虫的过程中,IP经常被阻塞,所以需要代理IP。

urllib2包中有一个ProxyHandler类,通过它可以设置访问网页的代理,如下面的代码片段所示:

导入urllib2proxy=urllib2。proxy handler({ ' http '' 127 . 0 . 0 . 1:8087 ' })opener=URL lib 2 . build _ opener(proxy)URL lib 2 . install _ opener(opener)response=URL lib 2 . URL open(' http://www . Baidu . com ')print response . read()

3、 cookie处理

Cookies是一些网站存储在用户本地终端上的数据(通常是加密的),目的是识别用户和跟踪会话。python提供了一个cookieslib模块来处理cookie。cookieslib模块的主要功能是提供可以存储cookie的对象,这样就可以和urllib2模块一起使用来访问Internet资源。

代码片段:

导入urllib2,cookielibcookie _ support=URL lib 2。HTTPCookieProcessor(cookielib。CookieJar())opener=URL lib 2 . build _ opener(cookie _ support)URL lib 2 . install _ opener(opener)content=URL lib 2 . URL open(' http://xxxx ')。阅读()

关键是CookieJar(),它用于管理HTTP cookie值,存储HTTP请求生成的cookie,并将cookie对象添加到传出的HTTP请求中。整个cookie存储在内存中,CookieJar实例垃圾回收后cookie会丢失,所有进程不需要单独操作。

手动添加cookie

cookie=' PHPSESSID=91 ruffqm 2329 bopnosfu 4 fvmu 7;km sign=55 D2 c12c 9 B1 e 3;KMUID=b 6 ejc 1 xswpq 9 o 756 axn bag=' request . add _ header(' Cookie 'Cookie)

4、伪装成浏览器

有些网站不喜欢爬虫的访问,所以都拒绝了对爬虫的请求。所以直接用urllib2访问网站经常会出现HTTP Error 403: Forbidden的情况。

特别注意一些头,服务器会检查这些头。

用户代理某些服务器或代理检查该值以确定请求是否由浏览器发起。

当Content-Type使用REST接口时,服务器将检查该值,以确定应该如何解析HTTP主体中的内容。

这可以通过修改http包中的头来实现。代码片段如下:

import URL lib 2 headers={ ' User-Agent '' Mozilla/5.0(Windows;u;Windows NT 6.1en-US;RV:1 . 9 . 1 . 6)Gecko/2009 12 01 Firefox/3 . 5 . 6 ' } request=URL lib 2。请求(URL=' http://my . oschina . net/jhao 104/blog?catalog=3463517 'headers=headers)打印urllib2.urlopen(request)。阅读()

5、页面解析

当然页面解析最厉害的还是正则表达式,不同网站不同用户不一样,不用我解释太多,附上两个比较好的网站:

正则表达式简介:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

正则表达式的在线测试:http://tool.oschina.net/regex/

其次是解析库。常用的有lxml和BeautifulSoup两种。对于这两者的使用,介绍两个比较好的网站:

lxml:http://my.oschina.net/jhao104/blog/639448

美丽的海岸:http://cuiqingcai.com/1319.html

对于这两个库,我的评价是都是HTML/XML处理库,Beautifulsoup是用python实现的,效率不高,但有实用功能,比如通过结果搜索获得一个HTML节点的源代码;LxmlC语言编码,高效,支持Xpath。

6、验证码的处理

对于一些简单的验证码,可以进行简单的识别。我只做过一些简单的验证码识别。但是有些反人类的验证码,比如12306,可以通过打码平台手工打码,当然是要收费的。

7、gzip压缩

你有没有遇到过一些网页?不管怎么转码,都是乱码。哈哈,那说明你不知道很多web服务都有发送压缩数据的能力,可以减少网络线路上传输的大量数据60%以上。这特别适合XML web服务,因为XML数据的压缩率可以非常高。

但是一般服务器不会为你发送压缩数据,除非你告诉服务器你可以处理压缩数据。

因此,您需要像这样修改代码:

导入urllib2,httplibrequest=urllib2。request(' http://xxxx . com ')request . add _ header(' Accept-encoding '' gzip ')1 opener=URL lib 2 . build _ opener()f=opener . open(request)

这是关键:创建一个请求对象,添加一个Accept-encoding头来告诉服务器您可以接受gzip压缩数据。

然后是数据的解压缩:

import string io import gzipcompresseddata=f . read()compressed stream=string io。StringIO(compressed data)gzipper=gzip。GzipFile(file obj=compressed stream)print gzipper . read()

8、多线程并发提取

如果单线程太慢,就需要多线程。下面是一个简单的线程池模板。这个程序只是简单的打印1-10,但是可以看出是并发的。

虽然python的多线程很蹩脚,但是对于频繁网络类型的爬虫来说,还是可以在一定程度上提高效率的。

从线程导入线程从队列导入线程从时间导入睡眠# q是任务队列#NUM是并发线程总数#JOBS是多少任务q=Queue()NUM=2JOBS=10#具体的处理函数,负责处理单个任务def do _ something _ using(arguments):print arguments #这是一个工作进程。负责不断从队列中取数据并处理def working():while true:arguments=q . get()do _ something _ using(arguments)sleep(1)q . task _ done()# fork NUM线程等待i in range(NUM)的队列。t=thread(target=working)t . set daemon(true)t . start()#为范围内的I排队作业(JOBS): q.put(i)#等待所有作业完成q.join()。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: 开普勒第三定律条件(开普勒第三定律适用范围)

下一篇: 血手幽灵鼠标激活和不激活(血手幽灵激活核心3可以在别的电脑上使用吗)



推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号