2013-12-21 106 views
4

我有一个scrapy蜘蛛,但它有时不返回请求。Scrapy:如何调试scrapy丢失请求

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

蜘蛛已遍历页面和解析每个页面上的项目报废链接。

下面是部分代码

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) 
     ... 

我比较每个日志信息的数量和“parse_item_general_send”比“parse_item_general_recv”

有没有在最后的统计信息没有400或500个错误,所有的回复状态代码只有200个。看起来请求只是消失。

我还添加了这些参数,以尽量减少可能出现的错误:

CONCURRENT_REQUESTS_PER_DOMAIN = 1 
DOWNLOAD_DELAY = 0.8 

由于扭曲的异步性,我不知道如何调试这个错误。 我发现一个类似的问题:Python Scrapy not always downloading data from website,却一直没有任何回应

+0

尝试禁用异地中间件以查看会发生什么。 – Rolando

+0

我试过了(根据[这个例子](http://doc.scrapy.org/en/latest/topics/spider-middleware.html)),nothig已经改变了,有些请求消失了,从2到5大约120个请求总是消失 –

+0

您可以提供一个重现此问题的最小示例吗?否则将很难指出有什么问题,因为这不是一个常见问题 – Rolando

回答

1

上,相同的音符为卢,你可以添加设置

DUPEFILTER_CLASS = 'scrapy.dupefilter.BaseDupeFilter' 

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

+0

我有同样的问题。不知何故,我总是他失去了30个请求,并且总是有相同的请求。在我的settings.py文件中设置这个选项后,一切正常。 – arthursfreire