学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本,本来想写google music的抓取脚本的,结果有了强大的gmbox,也就不用写了。
-
这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,再加上simplecd这个半爬虫半网站的项目,累积不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。

-
1.最基本的抓站

import urllib2 content = urllib2.urlopen('http://XXXX').read()

-
2.使用代理服务器
这在某些情况下比较有用,比如IP被封了,或者比如IP访问的次数受到限制等等。

import urllib2 proxy_support = urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'}) opener =urllib2.build_opener(proxy_support, urllib2.HTTPHandler) urllib2.install_opener(opener) content =urllib2.urlopen('http://XXXX').read()

-
3.需要登录的情况
登录的情况比较麻烦我把问题拆分一下:
-
3.1 cookie的处理

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

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

opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)

-
3.2 表单的处理
登录必要填表,表单怎么填?首先利用工具截取所要填表的内容
比如我一般用firefox+httpfox插件来看看自己到底发送了些什么包
这个我就举个例子好了,以verycd为例,先找到自己发的POST请求,以及POST表单项:


-
可以看到verycd的话需要填username,password,continueURI,fk,login_submit这几项,其中fk是随机生 成的(其实不太随机,看上去像是把epoch时间经过简单的编码生成的),需要从网页获取,也就是说得先访问一次网页,用正则表达式等工具截取返回数据中 的fk项。continueURI顾名思义可以随便写,login_submit是固定的,这从源码可以看出。还有username,password那 就很显然了。
-
好的,有了要填写的数据,我们就要生成postdata

import urllib postdata=urllib.urlencode({ 'username':'XXXXX', 'password':'XXXXX','continueURI':'http://www.verycd.com/', 'fk':fk, 'login_submit':'登录' })

-
然后生成http请求,再发送请求:

req = urllib2.Request( url = 'http://secure.verycd.com/signinhttp://www.verycd.com/', data = postdata, headers = headers ) #...

-
3.4 反”反盗链”
某些站点有所谓的反盗链设置,其实说穿了很简单,就是检查你发送请求的header里面,referer站点是不是他自己,所以我们只需要像3.3一样,把headers的referer改成该网站即可,以黑幕著称地cnbeta为例:

#... headers = { 'Referer':'http://www.cnbeta.com/articles' } #...

headers是一个dict数据结构,你可以放入任何想要的header,来做一些伪装。例如,有些自作聪明的网站总喜欢窥人隐私,别人通过代理 访问,他偏偏要读取header中的X-Forwarded-For来看看人家的真实IP,没话说,那就直接把X-Forwarde-For改了吧,可以 改成随便什么好玩的东东来欺负欺负他,呵呵。
-
3.5 终极绝招
有时候即使做了3.1-3.4,访问还是会被据,那么没办法,老老实实把httpfox中看到的headers全都写上,那一般也就行了。
再不行,那就只能用终极绝招了,selenium直接控制浏览器来进行访问,只要浏览器可以做到的,那么它也可以做到。类似的还有pamie,watir,等等等等。
-
4.多线程并发抓取
单线程太慢的话,就需要多线程了,这里给个简单的线程池模板
这个程序只是简单地打印了1-10,但是可以看出是并发地。

from threading import Thread from Queue import Queue from time import sleep #q是任务队列 #NUM是并发线程总数 #JOBS是有多少任务 q = Queue() NUM = 2 JOBS = 10 #具体的处理函数,负责处理单个任务 defdo_somthing_using(arguments): print arguments #这个是工作进程,负责不断从队列取数据并处理 def working():while True: arguments = q.get() do_somthing_using(arguments) sleep(1) q.task_done() #fork NUM个线程等待队列 for i in range(NUM): t = Thread(target=working) t.setDaemon(True) t.start() #把JOBS排入队列 for i inrange(JOBS): q.put(i) #等待所有JOBS完成 q.join()

5.验证码的处理
碰到验证码咋办?这里分两种情况处理:
-
1.google那种验证码,凉拌
-
2.简单的验证码:字符个数有限,只使用了简单的平移或旋转加噪音而没有扭曲的,这种还是有可能可以处理的,一般思路是旋转的转回来,噪音去掉,然后划分单个字符,划分好了以后再通过特征提取的方法(例如PCA)降维并生成特征库,然后把验证码和特征库进行比较。这个比较复杂,一篇博文是说不完的,这里就不展开了,具体做法请弄本相关教科书好好研究一下。
-
3.事实上有些验证码还是很弱的,这里就不点名了,反正我通过2的方法提取过准确度非常高的验证码,所以2事实上是可行的。
-
6.总结
基本上我遇到过的所有情况,用以上方法都顺利解决了,不太清楚还有没有其他漏掉的情况,所以本文到这里就完成了,以后要是碰上其他情况,再补充相关方法好了:)

python crawler(1)相关推荐

  1. python crawler

    python crawler http://www.scriptlearn.com/archives/1005 posted on 2010-05-07 14:05 lexus 阅读(...) 评论( ...

  2. python crawler(2)

    以前写过一篇使用python爬虫抓站的一些技巧总结,总结了诸多爬虫使用的方法:那篇东东现在看来还是挺有用的,但是当时很菜(现在也菜,但是比那时进步了不少),很多东西都不是很优,属于"只是能用 ...

  3. Python爬虫破解有道翻译

    有道翻译是以异步方式实现数据加载的,要实现对此类网站的数据抓取,其过程相对繁琐,本节我以有道翻译为例进行详细讲解. 通过控制台抓包,我们得知了 POST 请求的参数以及相应的参数值,如下所示: 图1: ...

  4. 基于python爬虫数据处理_基于Python爬虫的校园数据获取

    苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...

  5. 基于python爬虫技术的应用_基于Python爬虫技术的应用

    办公自动化杂志 一.引言 本文主要是对 Python 爬虫技术进行阐述,基于 python 的爬虫与其他语言相比的有很多优势.通过爬去某个网站的所有新闻这个案例,来进一步阐释 Python 爬虫技术的 ...

  6. python爬虫实践目的_Python编写爬虫实践

    爬虫的基本流程 网络爬虫的基本工作流程如下: 首先选取一部分精心挑选的种子URL 将种子URL加入任务队列 从待抓取URL队列中取出待抓取的URL,解析DNS,并且得到主机的ip,并将URL对应的网页 ...

  7. python爬取bilibili弹幕_GitHub - yxwangnju/Bilibili-Bullet-Screen-Crawler: 一个爬取bilibili上弹幕的简单python程序...

    Bilibili Bullet Screen Crawler 用python语言实现了一个简单的哔哩哔哩弹幕爬虫程序. 1. 运行环境 python 3 and higher versions. 运行 ...

  8. 基于python的学生成绩管理系统毕业设计源码071143

    Django学生成绩管理 摘   要 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革.多样性.质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化.依照这一现实为基础,设计一个快捷 ...

  9. python pdf解析毕业论文_电影数据读取、分析与展示毕业论文+任务书+Python项目源码...

    摘  要 Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python的Ma ...

最新文章

  1. 这届留学生太惨!美国高校不复课,特朗普政府却要断他们签证;吴恩达:糟糕透顶...
  2. WebService在开发中的实际问题
  3. 软件调试学习笔记(三)—— 调试事件的处理
  4. jzoj6312-Lottery【dp,前缀和】
  5. android获取当前位置经纬度,Android中通过GPS或NetWork获取当前位置的经纬度
  6. nyoj 56 阶乘中素数的个数
  7. socket()编程简介
  8. android加载obj文件,android – 从SD卡Rajawali解析.obj模型
  9. 禾赛科技李一帆:别让无人车的未来被一个小传感器憋死
  10. 使用Fiddler抓取HTTPS的包(Edge、Google)
  11. 2018 抖音热门歌曲大全
  12. discuz定时采集批量自动发帖
  13. Linux怎么同步另一台设备的时间
  14. python3*1**3 表达式输出结果为_22 % 3 表达式输出结果为________
  15. 阿里实习生电话面试果断被鄙视
  16. 破解flowplayer
  17. SNMP4J(通过java实现SNMP协议)
  18. 会话(gorilla/sessions)
  19. 繁体与简体之间的转化
  20. 服务器usb电源型号,锂电池、龙威305D电源、故障平板、同轴电缆、惠普服务器电源、4T硬盘、USB显卡、AP等...

热门文章

  1. Tensorflow矩阵过大问题的解决
  2. 【正一专栏】希望才是深深让人绝望的东西-论国足
  3. 哈夫曼编码(Huffman)Java实现代码简化版
  4. mysql 系统参数优化方法_Mysql 性能优化2 系统参数配置方法 和 文件系统
  5. 进阶指令——df指令(作用:查看磁盘的空间)、free指令(作用:查看内存使用情况)、head指令(作用:查看一个文件的前n行,如果不指定n,则默认显示前10行)、tail指令、less指令
  6. js DOM Element属性和方法整理
  7. Geany 权限问题:Error opening file ... : permission denied.,原因及解决办法。
  8. Linux minicom 软件退出方法
  9. Linux环境变量配置出错,导致登录不了......
  10. 标准日本语初级上第一单元 第一课[李さんは 中国人です]