如果页面上没有找到某些XPath,我需要能够重试请求。所以我写了这个中间件:
class ManualRetryMiddleware(RetryMiddleware):
def process_response(self, request, response, spider):
if not spider.retry_if_not_found:
return response
if not hasattr(response, 'text') and response.status != 200:
return super(ManualRetryMiddleware, self).process_response(request, response, spider)
found = False
for xpath in spider.retry_if_not_found:
if response.xpath(xpath).extract():
found = True
break
if not found:
return self._retry(request, "Didn't find anything useful", spider)
return response
并在
settings.py
:
DOWNLOADER_MIDDLEWARES = {
'myproject.middlewares.ManualRetryMiddleware': 650,
'scrapy.downloadermiddlewares.retry.RetryMiddleware': None,
}
当我运行蜘蛛时,我得到
AttributeError: 'Response' object has no attribute 'xpath'
text
财产和
response.body
那么,我如何在中间件中检查页面内容呢?有些页面可能不包含我需要的详细信息,因此我希望能够稍后再试。