做一个好公民和网络抓

时间:2011-12-17 04:18:20

标签: python screen-scraping scrapy

我有两个问题。

首先,我正在写一个基于Scrapy中CrawlSpider蜘蛛的网络刮刀。我的目标是抓住一个拥有数千个(可能达到数十万)记录的网站。这些记录从起始页面向下埋藏2-3层。所以基本上我在某个页面上有蜘蛛启动,爬行直到找到特定类型的记录,然后解析html。我想知道是什么方法来防止我的蜘蛛超载网站?是否有可能以渐进方式执行操作或在不同请求之间暂停?

第二,相关的,是否有一种Scrapy方法可以测试爬虫而不会对网站施加过度的压力?我知道你可以在程序运行时终止程序,但有没有办法让脚本在遇到像我想要抓取的信息的第一页之类的东西后停止?

非常感谢任何建议或资源。

2 个答案:

答案 0 :(得分:6)

  

是否可能有办法逐步做事

我正在使用Scrapy缓存功能来逐渐抓取网站

HTTPCACHE_ENABLED = True

或者您可以使用新的0.14功能Jobs: pausing and resuming crawls

  

或在不同的请求之间暂停一下?

检查此设置:

DOWNLOAD_DELAY    
RANDOMIZE_DOWNLOAD_DELAY
  

是否有一种Scrapy方法可以测试爬虫而不会对网站施加过度的压力?

您可以在Scrapy shell

中尝试调试代码
  

我知道你可以在程序运行时终止该程序,但是有没有办法让这个脚本在遇到像我想要抓取的信息的第一页之后停止?

此外,您可以随时在蜘蛛中拨打scrapy.shell.inspect_response

  

非常感谢任何建议或资源。

Scrapy文档是最好的资源。

答案 1 :(得分:-2)

您必须开始抓取并记录所有内容。如果您被禁止,您可以在页面请求之前添加sleep()。

更改用户代理也是一种很好的做法(http://www.user-agents.org/ http://www.useragentstring.com/

如果您被ip禁止,请使用代理绕过它。欢呼声。