Scrapy:如何调试Scrapy丢失的请求

Nik*_*lub 6 python twisted scrapy

我有一只沙哑的蜘蛛,但有时不会返回请求。

我发现通过在产生请求之前和获得响应之后添加日志消息。

Spider会遍历页面并解析链接以在每页上进行项目报废。

这是代码的一部分

SampleSpider(BaseSpider):
    ....
    def parse_page(self, response):
        ...
        request = Request(target_link, callback=self.parse_item_general)
        request.meta['date_updated'] = date_updated
        self.log('parse_item_general_send {url}'.format(url=request.url), level=log.INFO)
        yield request

    def parse_item_general(self, response):
        self.log('parse_item_general_recv {url}'.format(url=response.url), level=log.INFO)
        sel = Selector(response)
        ...
Run Code Online (Sandbox Code Playgroud)

我已经比较了每条日志消息的数量,“ parse_item_general_send”比“ parse_item_general_recv”还多

最终统计信息中没有400或500个错误,所有响应状态码都只有200。看起来请求就消失了。

我还添加了以下参数以最大程度地减少可能的错误:

CONCURRENT_REQUESTS_PER_DOMAIN = 1
DOWNLOAD_DELAY = 0.8
Run Code Online (Sandbox Code Playgroud)

由于扭曲的异步性质,我不知道如何调试此错误。我发现了一个类似的问题:Python Scrapy并不总是从网站上下载数据,但没有任何响应

Iam*_*man 1

On,与Rho相同的注释,可以添加设置

DUPEFILTER_CLASS = 'scrapy.dupefilter.BaseDupeFilter' 
Run Code Online (Sandbox Code Playgroud)

到您的“settings.py”,这将删除网址缓存。这是一个棘手的问题,因为 scrapy 日志中没有调试字符串告诉您何时使用缓存结果。