爬虫技能树:
##爬虫进阶必须 http://www.yeayee.com/article-6569383-1.html
0. requests 模块, beautifulsoup模块, css选择器语法, re正则模块, http头编写, cookies,json解析等一定要掌握至熟练及以上程度.
1. 爬取重ajax页面, 推荐phantomjs,其次selenium.
2. 破解图片验证码,推荐谷歌开源库pytesser,进一步深入可以学习<高等数学-线性代数>, pandas, numpy, k近邻算法.
3. 过滤器, 推荐布隆过滤器Bloom Filter及其c实现;
4. 分布式爬虫(消息队列).推荐rabbitmq.
5. 任务调度. 推荐schedule.
基本上是这样一个学习阶梯. 另: 反对学习任何爬虫框架, 尤其 scrapy, pyspider. 原因:这两个框架太优秀,太全。
使用 Google 的 OCR 开源库 tesseract,对应的Python包是pytesser,如果只是做简单(没有数字重叠)的数字识别,那么仅需调用接口就能完成识别。
##爬虫方案分析 https://www.cnblogs.com/zw369/p/6123569.html
1、python自带的urllib2和urllib或者第三方模块requests
这种方案适合简单的页面爬虫,比如爬取博客园推荐文章。
urllib2和urllib是python自带模块可用来发送处理请求,虽然比较灵活但API易用性较差,所以一般都要进行二次封装,我曾经也进行过封装,最后发现自己封装出来的模块无限趋近于非常成熟的requests库,所以还是直接使用requests吧,当然requests只发送和接受请求,对于页面分析还要配合lxml或beautifulsoup等第三方库进行。高级点的爬虫不仅仅是发送和处理请求,还需要处理异常,请求速度控制等问题,这就需要我们写额外的代码去控制,当然我们可以自己写只是时间问题,但完全没有必要,接下来我会介绍第二种方案。
2、scrapy框架
scrapy是爬虫领域的佼佼者,目前我做的项目无论复杂与否,都采用scrapy进行,对于请求调度,异常处理都已经封装好了,而且有第三方的scrapy-redis还可以支持分布式,我们把关注点放在更重要的页面分析和规则编写上,代码可以参考github上的例子。(https://github.com/world1234567/scrapy_for_huxiu)
3、selenium
这种方式我称为终极必杀器,一般是实在没办法的时候才用,以前我在利用某家搜索引擎抓取文章时,该搜索引擎采用的比较高难度的反爬虫机制而且不断变化让人找不到规律,最典型的特点就是cookie会随机隐藏到某个页面js和图片中,解决方案就是模拟浏览器的行为加载所有js等静态资源文件,如果自己写个浏览器取解析太扯蛋了,如果chrome浏览器能开放接口,通过chrome的加载方式获取页面的内容就好了,这就是selenium了,selenium加上随机等待时间可以模拟出和人非常类似的操作行为,缺点就是速度较慢,但是一般爬虫对抓取速度要求不高,重要的是稳定性,这种方式对于抓取反爬虫机制做的好的大型网站比较适用。
总结:对于大部分爬虫需求直接用scrapy解决,如果解决不了再采用第一种或第三种方案,就这么简单。