正在被抓取并获得200个响应状态的URL的数量不相同。另外,我想获得带有各自响应的URL。我正在使用Scrapy抓取70,000个URL,并希望通过Scrapy获取每个URL的HTTP响应状态,以便在获取特定URL的内容之后,我们还将获得该URL的响应代码:
URL,内容,响应代码
答案 0 :(得分:0)
问题在于,默认情况下,如果将错误响应代码返回到蜘蛛,Scrapy不会调用您的回调。为了确保即使对响应代码(例如404
,500
等)都调用了回调,您必须在请求meta
参数中传递以下两个键:
handle_httpstatus_all
:当True
时,scrapy不会将无效的响应代码视为错误,而是会调用您的回调来处理此类响应。
dont_retry
:当True
时,抓取不会在获取可重试响应时重试该请求。
您的蜘蛛可能就是这些东西:
class YourSpider(scrapy.Spider):
name = 'yourspider'
your_list_of_urls = [
...
]
def start_requests(self):
for url in self.your_list_of_urls:
yield scrapy.Request(
url,
callback=self.parse_info,
meta={
'handle_httpstatus_all': True,
'dont_retry': True,
},
)
def parse_info(self, response):
yield {
'url': response.url,
'content': response.text,
'status': response.status,
}