已经有一段时间没有写博客了,这段时间主要忙于做课内作业。前阵子写完机器学习实战的读书笔记后,一直想找个机会做一个小Demo,可是对于机器学习实验来说,收集数据是相当关键的一步,这就让我想起了之前学的爬虫。想想接触爬虫到现在也有几个月了,是时候从头回顾,把整个爬虫学习系统整理出来,整理行囊,重新出发了!
阶段一:Python基础知识学习
这个部分是学习Python爬虫绝对不可以忽略的,如果你连写出漂亮Python代码的能力都没有,更别谈用Python爬虫了。
Python主要有Python2和Python3两个版本,建议大家选择Python3,毕竟技术总是在向前发展,而且Python3相关的资料也越来越多,具体的教程推荐廖雪峰的Python3教程。
如果你只是学习爬虫的话,那么个人有几篇关于Python的文章想要推荐,包括Python之数据结构、Python模块、一起来让Python代码变得Pythonic。
阶段二:爬虫入门
了解了Python的一些基本知识后,我们就可以开始爬取想要的数据了,那么我们需要用到哪些工具呢?具体如下:
- 爬取网页:urllib或urllib2
- 解析网页:re(支持正则表达式)
- JS操作:selenium+phantomjs(直接操作浏览器,获取JS渲染后的页面)
- 数据操作:openpyxl(读写excel)、xlsxwriter(写入excel优选,不支持读excel)、pymysql(MySQL数据库操作)
上面很多库已经能解决基本的问题了,但有些库在遇到要求更高的爬虫时效率很低,所以我们有一些更好的替代库。
阶段三:爬虫再入门
工欲善其事,必先利其器。有更好的爬虫工具,能够让我们更有效率的实现目的,接下来我们就来认识几个爬虫利器:
- 爬取网页:requests
- 解析网页:beautifulsoup4(要求快速开发时优选,HTML解析)、lxml(要求性能时优选,XPath解析)
- JS操作:F12开发者工具+Python模拟操作(更多内容可参考这里)
- 数据操作:SQLAlchemy(ORM框架)
阶段四:爬虫三入门
接触了Python爬虫一段时间后,我们就可以考虑是要造轮子还是用现有框架了,个人的建议是用现有的框架,一方面是因为现有框架相对成熟,能够提高我们的开发效率,另一方面是只有当我们用过别人成熟的框架之后,我们才对框架的作用更加清楚,才可能去造适合我们的轮子。那么Python爬虫有什么框架呢?具体如下:
- scrapy(自定义程度高,文档强,但学习难度较高,需要结合splash进行js渲染,建议优选选择)
- pyspider(国内大神神作,上手简单,操作简便,内置pyquery选择器,增加了WEB界面并集成了phantomjs)
阶段五:爬虫进阶
当我们爬取的数据越来越多,对效率的要求越来越高的时候,我们就需要学习一些更深的内容,包括以下几个方面:
- 多线程、多进程、分布式:三种方式从左到右,一个比一个强大, 当我们对效率要求高时,可以考虑这些方案
- IP代理:对于豆瓣等有反爬虫机制的网站,爬没多久就会被封IP,面对这种情况,我们可以选择减缓爬取速度,但这样会导致爬取效率降低,最好的解决方式就是使用IP代理,具体可以参考这里
- 布隆过滤器:url去重是爬虫中经常出现的问题之一,而布隆过滤器是解决这个问题的绝佳方式
附:一些小技巧
- 所有网站爬虫,优先选择爬移动版,如微博移动版
在博主初学Python爬虫时,Python爬虫学习系列教程给我带来了很大的帮助,在此也推荐给大家。做完整理之后,发现自己的Python爬虫能力还有很大的提升空间。期间看到了一个关于IP代理库的爬虫,接下来也会找时间做这个实验,敬请期待!