做好公民与网络爬虫

6 投票
2 回答
1070 浏览
提问于 2025-04-17 08:32

我有两个问题。

首先,我正在写一个网络爬虫,使用的是Scrapy中的CrawlSpider。我的目标是抓取一个网站,这个网站上有成千上万(甚至可能有几十万)条记录。这些记录在首页的2-3层深处。所以基本上,我让爬虫从某个页面开始,爬取直到找到特定类型的记录,然后解析这些网页的内容。我想知道有什么方法可以防止我的爬虫给网站带来过大的负担?有没有可能以增量的方式进行操作,或者在不同请求之间加个暂停?

第二个问题,相关的就是,Scrapy有没有什么方法可以测试爬虫,而不会给网站带来过大的压力?我知道你可以在程序运行时终止它,但有没有办法让脚本在找到我想抓取的信息的第一页后就停止?

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

2 个回答

-2

你需要开始抓取数据,并记录下所有的内容。如果你被封了,可以在请求页面之前加上 sleep(),让程序暂停一下。

更改用户代理(User-Agent)也是个好习惯,用户代理是告诉网站你用什么设备和浏览器访问它的一个信息(你可以在这里查看相关信息:http://www.user-agents.org/ 和 http://www.useragentstring.com/)。

如果你的IP被封了,可以使用代理来绕过这个限制。祝好运!

6

有没有可能以增量的方式来做事情呢?

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

HTTPCACHE_ENABLED = True

或者你可以使用新的0.14版本的功能,工作:暂停和恢复爬虫

或者在不同请求之间加个暂停呢?

可以查看这些设置:

DOWNLOAD_DELAY    
RANDOMIZE_DOWNLOAD_DELAY

有没有什么方法可以用Scrapy测试爬虫,而不会给网站带来太大压力?

你可以在Scrapy shell中尝试和调试你的代码。

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

另外,你可以在你的爬虫中随时调用scrapy.shell.inspect_response

任何建议或资源都将非常感激。

Scrapy的文档是最好的资源。

撰写回答