【发布时间】:2019-02-14 09:21:13
【问题描述】:
我正在尝试使用 scrapy 测试一些网站及其子网站的 http 返回码,分别检测 400 和 500 范围内的错误。但是另外,我还想查看和处理 300 范围内的代码。我已经尝试了几天并检查了文档,但是我被卡住了,找不到解决方案。感谢您的帮助!
接下来您将看到我正在使用 CrawlSpider 创建的蜘蛛。目标是在我的 parse_item() 函数的错误范围内查看/捕获 http 响应。我在 settings.py 中添加了 handle_httpstatus_all = True,但除了 HTTP_STATUS = 200 之外,parse_item 没有其他内容。
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
当谈到没有通过错误代码的原因时,我很可能错过了一些基本的东西。
【问题讨论】:
标签: python scrapy http-error