蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > DOCX文档下载
 

用python爬虫抓站的一些技巧.docx

  • 资源ID:619276       资源大小:67.49KB        全文页数:10页
  • 资源格式: DOCX        下载权限:游客/注册会员    下载费用:8积分 【人民币8元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要8积分 【人民币8元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

用python爬虫抓站的一些技巧.docx

用PYTHON爬虫抓站的一些技巧总结收藏人20130305|阅转||分享学用PYTHON也有3个多月了,用得最多的还是各类爬虫脚本写过抓代理本机验证的脚本,写过在DISCUZ论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本,本来想写GOOGLEMUSIC的抓取脚本的,结果有了强大的GMBOX,也就不用写了。这些脚本有一个共性,都是和WEB相关的,总要用到获取链接的一些方法,再加上SIMPLECD这个半爬虫半网站的项目,累积不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。1最基本的抓站IMPORTURLLIB2CONTENTURLLIB2URLOPENHTTP//XXXXREAD2使用代理服务器这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。IMPORTURLLIB2PROXY_SUPPORTURLLIB2PROXYHANDLER{HTTPHTTP//XXXXXXXXXXXX}OPENERURLLIB2BUILD_OPENERPROXY_SUPPORT,URLLIB2HTTPHANDLERURLLIB2INSTALL_OPENEROPENERCONTENTURLLIB2URLOPENHTTP//XXXXREAD3需要登录的情况登录的情况比较麻烦我把问题拆分一下31COOKIE的处理IMPORTURLLIB2,COOKIELIBCOOKIE_SUPPORTURLLIB2HTTPCOOKIEPROCESSORCOOKIELIBCOOKIEJAROPENERURLLIB2BUILD_OPENERCOOKIE_SUPPORT,URLLIB2HTTPHANDLERURLLIB2INSTALL_OPENEROPENERCONTENTURLLIB2URLOPENHTTP//XXXXREAD是的没错,如果想同时用代理和COOKIE,那就加入PROXY_SUPPORT然后OPERNER改为OPENERURLLIB2BUILD_OPENERPROXY_SUPPORT,COOKIE_SUPPORT,URLLIB2HTTPHANDLER32表单的处理登录必要填表,表单怎么填首先利用工具截取所要填表的内容。比如我一般用FIREFOXHTTPFOX插件来看看自己到底发送了些什么包这个我就举个例子好了,以VERYCD为例,先找到自己发的POST请求,以及POST表单项可以看到VERYCD的话需要填USERNAME,PASSWORD,CONTINUEURI,FK,LOGIN_这几项,其中FK是随机生成的(其实不太随机,看上去像是把EPOCH时间经过简单的编码生成的),需要从网页获取,也就是说得先访问一次网页,用正则表达式等工具截取返回数据中的FK项。CONTINUEURI顾名思义可以随便写,LOGIN_是固定的,这从源码可以看出。还有USERNAME,PASSWORD那就很显然了。好的,有了要填写的数据,我们就要生成POSTDATAIMPORTURLLIBPOSTDATAURLLIBURLENCODE{USERNAMEXXXXX,PASSWORDXXXXX,CONTINUEURIHTTP//WWWVERYCDCOM/,FKFK,LOGIN_登录}然后生成HTTP请求,再发送请求REQURLLIB2REQUESTURLHTTP//SECUREVERYCDCOM/SIGNIN//HTTP//WWWVERYCDCOM/,DATAPOSTDATARESULTURLLIB2URLOPENREQREAD33伪装成浏览器访问某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。这时候我们需要伪装成浏览器,这可以通过修改HTTP包中的HEADER来实现HEADERS{USERAGENTMOZILLA/50WINDOWSUWINDOWSNT61ENUSRV1916GECKO/20091201FIREFOX/356}REQURLLIB2REQUESTURLHTTP//SECUREVERYCDCOM/SIGNIN//HTTP//WWWVERYCDCOM/,DATAPOSTDATA,HEADERSHEADERS34反”反盗链”某些站点有所谓的反盗链设置,其实说穿了很简单,就是检查你发送请求的HEADER里面,REFERER站点是不是他自己,所以我们只需要像33一样,把HEADERS的REFERER改成该网站即可,以黑幕著称地CNBETA为例HEADERS{REFERERHTTP//WWWCNBETACOM/ARTICLES}HEADERS是一个DICT数据结构,你可以放入任何想要的HEADER,来做一些伪装。例如,有些自作聪明的网站总喜欢窥人隐私,别人通过代理访问,他偏偏要读取HEADER中的XFORWARDEDFOR来看看人家的真实IP,没话说,那就直接把XFORWARDEFOR改了吧,可以改成随便什么好玩的东东来欺负欺负他,呵呵。35终极绝招有时候即使做了3134,访问还是会被据,那么没办法,老老实实把HTTPFOX中看到的HEADERS全都写上,那一般也就行了。再不行,那就只能用终极绝招了,SELENIUM直接控制浏览器来进行访问,只要浏览器可以做到的,那么它也可以做到。类似的还有PAMIE,WATIR,等等等等。4多线程并发抓取单线程太慢的话,就需要多线程了,这里给个简单的线程池模板这个程序只是简单地打印了110,但是可以看出是并发地。FROMTHREADINGIMPORTTHREADFROMQUEUEIMPORTQUEUEFROMTIMEIMPORTSLEEPQ是任务队列NUM是并发线程总数JOBS是有多少任务QQUEUENUM2JOBS10具体的处理函数,负责处理单个任务DEFDO_SOMTHING_USINGARGUMENTSPRINTARGUMENTS这个是工作进程,负责不断从队列取数据并处理DEFWORKINGWHILETRUEARGUMENTSQGETDO_SOMTHING_USINGARGUMENTSSLEEP1QTASK_DONEFORKNUM个线程等待队列FORIINRANGENUMTTHREADTARGETWORKINGTSETDAEMONTRUETSTART把JOBS排入队列FORIINRANGEJOBSQPUTI等待所有JOBS完成QJOIN5验证码的处理碰到验证码咋办这里分两种情况处理GOOGLE那种验证码,凉拌简单的验证码字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的,这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,然后划分单个字符,划分好了以后再通过特征提取的方法例如PCA降维并生成特征库,然后把验证码和特征库进行比较。这个比较复杂,一篇博文是说不完的,这里就不展开了,具体做法请弄本相关教科书好好研究一下。事实上有些验证码还是很弱的,这里就不点名了,反正我通过2的方法提取过准确度非常高的验证码,所以2事实上是可行的。6GZIP/DEFLATE支持现在的网页普遍支持GZIP压缩,这往往可以解决大量

注意事项

本文(用python爬虫抓站的一些技巧.docx)为本站会员(马老师)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开