【发布时间】:2013-03-28 13:56:48
【问题描述】:
我是 Scrapy 的新手,我正在尝试使用 CrawlSpider 从文本文件中抓取多个站点。但是,我想限制 per 网站的抓取深度以及再次 per 网站的抓取页面总数。不幸的是,当 start_urls 和 allowed_domains 属性设置时 response.meta['depth'] 似乎总是为零(当我试图抓取单个站点时不会发生这种情况)。在设置文件中设置 DEPTH_LIMIT 似乎根本没有做任何事情。 当我删除 init 定义并简单地设置 start_urls 和 allowed_domains 事情似乎工作正常。 这是代码(抱歉缩进——这不是问题):
class DownloadSpider(CrawlSpider):
name = 'downloader'
rules = (
Rule(SgmlLinkExtractor(), callback='parse_item', follow=True),
)
def __init__(self, urls_file, N=10):
data = open(urls_file, 'r').readlines()[:N]
self.allowed_domains = [urlparse(i).hostname.strip() for i in data]
self.start_urls = ['http://' + domain for domain in self.allowed_domains]
def parse_start_url(self, response):
return self.parse_item(response)
def parse_item(self, response):
print response.url
print response.meta['depth']
这会导致 response.meta['depth'] 始终等于 0,并且 cralwer 仅抓取 start_urls 的每个元素的第一个站点(即它不跟随任何链接)。所以我有两个问题 1) 如何在 start_urls 中限制每个站点的爬取到一定深度per 2)如何限制每个站点的总爬取次数,而不考虑深度
谢谢!
【问题讨论】:
-
看来问题出在您将参数传递给蜘蛛的部分。如果将其删除,则爬虫可以在 DEPTH_LIMIT 设置下正常工作。然而,这使得它在为它提供一组不断变化的网站以进行抓取时非常低效
标签: python scrapy web-crawler