我尝试使用scrapy测试一些网站及其子网站的http返回代码,resp来检测400和500范围内的错误。然而另外,我也希望看到和处理300范围内的代码。我已经试了好几天,检查了文件,但是我卡住了,没有找到解决办法。谢谢你的帮助!在
下面你会看到我用爬行蜘蛛创建的蜘蛛。目标是在parse_item()函数中查看/捕捉错误范围内的http响应。我已将handle_httpstatus_all=True添加到设置.py但是除了HTTP_STATUS=200之外,parse_项中没有其他内容。在
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy import log
class IcrawlerSpider(CrawlSpider):
name = 'icrawler'
def __init__(self, *args, **kwargs):
# We are going to pass these args from our django view.
# To make everything dynamic, we need to override them inside__init__method
handle_httpstatus_all = True
self.url = kwargs.get('url')
self.domain = kwargs.get('domain')
self.start_urls = [self.url]
self.allowed_domains = [self.domain]
IcrawlerSpider.rules = [
Rule(LinkExtractor(unique=True), callback='parse_item'),
]
super(IcrawlerSpider, self).__init__(*args, **kwargs)
def parse_item(self, response):
# You can tweak each crawled page here
# Don't forget to return an object.
if response.status==403:
self.logger.errror("ERROR_CODE_RETURNED: " + response.status)
i = {}
i['url'] = response.url
i['status_code'] = response.status
return i
当谈到为什么没有错误代码被传递的原因时,我很可能遗漏了一些基本的东西。在
标记
handle_httpstatus_all
应该在每个请求的meta
中设置,请检查文档here。在关于设置,您可以使用}的列表。在
HTTPERROR_ALLOW_ALL
或设置{像这样:
或者重构蜘蛛来调用请求,比如
yield Request(link, self.parse_item, meta={'handle_httpstatus_all': True})
我不知道如何将元参数应用于规则。在如果需要使用规则来执行此操作,则可以通过提供
process_request
回调来修改生成的请求。以下是总结:引用documentation和example。在
相关问题 更多 >
编程相关推荐