Python 3 网络爬虫学习建议?

Python 3 网络爬虫学习建议?

谢谢邀请!

写python爬虫2年多了,主要用的scrapy。关于python3,还没有开始学;在这方面,我算是传统的。一直在思考什么时候转python3。我主要关注的是我常用的python库是否支持,一旦支持,就立刻转python3.从最早的django、MySQLdb、PIL(Pillow)不支持,但现在这三者都支持了。所以在做web项目的时候是可以直接用python3了。所以现在的计划是今年下半年转python3。

说回爬虫。scrapy确实使用者众,可惜还不支持python3。所以现在的爬虫项目还是用python2.7。现在用着非常顺手。我的思路是,用django开发业务逻辑,根据业务逻辑建立的model,用scrapy抓取。是的,我的项目将django和scrapy代码放在一个repo了。也可以分开。另外,scrapy的调度使用的是celery,所有爬虫的调度时间和频率都是用celery控制的。django、scrapy、celery是我做开发的三大法器。

如果你不想使用scrapy等框架,像上面的回答一样,用一些请求库和解析库也能搭建出来。但我倾向于用django、celery、scrapy搭建通用的抓取系统。简单说,用django建立模型,scrapy做一些常用爬虫,规则定义模块;celery制定调度策略,可以非常快地建立一套系统。

规则定义模块 不是说的scrapy的Rule,而是我自定义的一套规则。它描述了抓取的起始URL如何获取,如何发现需要的url及处理动作,需要抓取哪个Item, Item中每个Field的规则定义(xpath、css、json, processors,default value,是否需要更新等)。这里说不完整,确实比较发杂。对于熟悉这套规则的人来说,比较简单,抓取过程变成了定义item及规则,写好调度策略即可。

这样做的另一个好处是,有利于经验积累。因为在抓取过程中遇到过各种各样的坑,都在这套系统上解决,这样一套好用、稳定的爬虫系统就建立了。

想过把这些代码产品化,但确实太复杂了,还在不断完善中。但好处已经出现。新开始一个项目非常快,非常简单。

写得有点乱。欢迎随时交流!