我正在使用Scrapy来ping一堆网页,并确定哪些主页不再存在。
我的蜘蛛的完整代码非常简单,并在下面转载:
class BrokenLinksSpider(scrapy.Spider):
name = 'broken-link-spider'
def __init__(self, id_homepage_mapping, *args, **kwargs):
self.org_homepages = id_homepage_mapping
self.download_timeout = 10
def start_requests(self):
for qId, url in self.org_homepages.items():
if url.endswith("/"):
url = url[0:-1]
yield scrapy.Request(url,
callback=self.complete_callback,
errback=self.error_callback,
dont_filter=True,
meta={ 'handle_httpstatus_all': True, 'id': id })
def complete_callback(self, response):
if str(response.status)[0] in ("4", "5"):
yield BrokenLinkCheckerItem(
url=response.request.url,
status=response.status,
qId=response.meta['id'])
def error_callback(self, failure):
yield BrokenLinkCheckerItem(
url=failure.request.url,
status=repr(failure),
qId=failure.request.meta['id'])
在我的应用程序的日志中,我可以在scrapy统计信息收集器中看到有异常提取大约40,000个链接。但是,我写的csv输出文件只包含大约8k行。此外,CSV文件似乎包含StatsCollector报告的所有不同类型的异常,每个异常的实例更少。
所以我的问题是,为什么statsCollector报告的内容和实际写入CSV的内容之间存在这样的差异?鉴于我对errback
回调函数的理解,不应该将所有这些异常写入CSV吗?
谢谢!