做好公民与网络爬虫
我有两个问题。
首先,我正在写一个网络爬虫,使用的是Scrapy中的CrawlSpider。我的目标是抓取一个网站,这个网站上有成千上万(甚至可能有几十万)条记录。这些记录在首页的2-3层深处。所以基本上,我让爬虫从某个页面开始,爬取直到找到特定类型的记录,然后解析这些网页的内容。我想知道有什么方法可以防止我的爬虫给网站带来过大的负担?有没有可能以增量的方式进行操作,或者在不同请求之间加个暂停?
第二个问题,相关的就是,Scrapy有没有什么方法可以测试爬虫,而不会给网站带来过大的压力?我知道你可以在程序运行时终止它,但有没有办法让脚本在找到我想抓取的信息的第一页后就停止?
任何建议或资源都将非常感谢。
2 个回答
你需要开始抓取数据,并记录下所有的内容。如果你被封了,可以在请求页面之前加上 sleep(),让程序暂停一下。
更改用户代理(User-Agent)也是个好习惯,用户代理是告诉网站你用什么设备和浏览器访问它的一个信息(你可以在这里查看相关信息:http://www.user-agents.org/ 和 http://www.useragentstring.com/)。
如果你的IP被封了,可以使用代理来绕过这个限制。祝好运!
有没有可能以增量的方式来做事情呢?
我正在使用Scrapy的缓存功能来逐步抓取网站。
或者你可以使用新的0.14版本的功能,工作:暂停和恢复爬虫
或者在不同请求之间加个暂停呢?
可以查看这些设置:
DOWNLOAD_DELAY
RANDOMIZE_DOWNLOAD_DELAY
有没有什么方法可以用Scrapy测试爬虫,而不会给网站带来太大压力?
你可以在Scrapy shell中尝试和调试你的代码。
我知道你可以在程序运行时终止它,但有没有办法让脚本在抓取到我想要的信息的第一页后就停止?
另外,你可以在你的爬虫中随时调用scrapy.shell.inspect_response。
任何建议或资源都将非常感激。
Scrapy的文档是最好的资源。