十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

【转】用python爬虫抓站的一些技巧总结

上一篇 / 下一篇  2011-04-06 23:40:16 / 个人分类:python

学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本,本来想写google music的抓取脚本的,结果有了强大的gmbox,也就不用写了。
BZ J o^q+F0-
cP)?,\3]*Z`1Z~0这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,再加上simplecd这个半爬虫半网站的项目,累积不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。
z u:?%A9k e A/~0
}8c%N1L&{9G3f[8D0-
%g%{1p.PIk01.最基本的抓站

2O2|"I8P$q0
importurllib2content =urllib2.urlopen('http://XXXX').read()

-
]J(dPw|02.使用代理服务器
ma{ c;[0这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。

~3q/Zu)_ym}2q1[!^9s0
importurllib2proxy_support =urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'})pener =urllib2.build_opener(proxy_support,urllib2.HTTPHandler)urllib2.install_opener(opener)content =urllib2.urlopen('http://XXXX').read()

-51Testing软件测试网/F:K'}5k o]%z
3.需要登录的情况
4yi+In2Z-C.e0登录的情况比较麻烦我把问题拆分一下:
]'|n4_ p0I+t jP.F0-
(xKKbv03.1 cookie的处理51Testing软件测试网'D*ET'{X jP

importurllib2,cookielibcookie_support=urllib2.HTTPCookieProcessor(cookielib.CookieJar())pener =urllib2.build_opener(cookie_support,urllib2.HTTPHandler)urllib2.install_opener(opener)content =urllib2.urlopen('http://XXXX').read()

是的没错,如果想同时用代理和cookie,那就加入proxy_support然后operner改为

W(t1T#^U9R0
opener =urllib2.build_opener(proxy_support, cookie_support,urllib2.HTTPHandler)

-51Testing软件测试网 Mo!_$[1llY
3.2 表单的处理
kf8q-^ovlA}\3Uk1\0登录必要填表,表单怎么填?首先利用工具截取所要填表的内容51Testing软件测试网2uRq1Qi qo Yek
比如我一般用firefox+httpfox插件来看看自己到底发送了些什么包51Testing软件测试网7u.B#?1C8Dh'k
这个我就举个例子好了,以verycd为例,先找到自己发的POST请求,以及POST表单项:51Testing软件测试网9uFso#OR
post151Testing软件测试网)u5gI5v-bkR
post2
4V}J#q,?db'J9o0-
G4Jf7C,`jD0可以看到verycd的话需要填username,password,continueURI,fk,login_submit这几项,其中fk是随机生成的(其实不太随机,看上去像是把epoch时间经过简单的编码生成的),需要从网页获取,也就是说得先访问一次网页,用正则表达式等工具截取返回数据中的fk项。continueURI顾名思义可以随便写,login_submit是固定的,这从源码可以看出。还有username,password那就很显然了。
2Ai,I,]c0-
_![+P1g'P-~4{0好的,有了要填写的数据,我们就要生成postdata

-`.]qwA)Pp{ z2lV/n0
import

TAG: 爬虫

 

评分:0

我来说两句

Open Toolbar