scrapy爬虫
笔者近期有一个特定网站全站爬取的需求。因为全站数据量大,又希望时间开销小。作为一个入门级的爬虫工作者,根据以往经验,笔者(主要使用python
编程)设想了以下几种方案:
selenium
1、用 selenium
模拟浏览器爬虫,自己改造框架,使得可以多层全站爬取。
这里,模拟浏览器的好处在于可以加载运行JS
脚本,能够解决一些JS
脚本动态生成链接的问题。但是对于全站爬取而非特定页面,这样的时间开销很大,工作也很复杂,不太适合入门级的选手。(关于时间开销,如果有加速的办法和分布式解决方案请给笔者留言)
wget
2、用 wget
加-m(mirror)
参数,全站镜像,或者用-r -l n
参数,限制多层爬取。
尽管可以限制爬取的文件类型和爬取深度,但是命令行的参数可配置性非常有限。最重要的是,简单暴力的wget
给人的感觉应该是快,而实际上wget
的爬取速度很慢,尤其是对于一个大站点,据笔者的经验,scrapy
5分钟的工作量,wget
1个小时才能完成。
另外,要想加速爬取,需要多线程和分布式,笔者调研了wget
的多线程版本,mwget
完全只有大文件下载加速功能(没有wget
的各种功能)。所以wget
方案可定制性差,速度慢,没有现成的多线程解决方案。
scrapy
3、scrapy
这个非常成熟的爬虫框架,用python
实现,有无数先辈实践,而且有基于redis
的分布式版本,其优点不再赘述。