Python 残损合同-延期付款中未处理的错误

Python 残损合同-延期付款中未处理的错误,python,web-scraping,scrapy,scrapy-spider,Python,Web Scraping,Scrapy,Scrapy Spider,我正在使用Scrapy编写一个spider,目前我正在向spider添加合同。spider仍然运行良好,但在合同中添加@returns之后,我在运行检查时得到了奇怪的结果 @returns response 1 运行scrapy check时,我突然得到“未处理的错误被延迟”: 蜘蛛代码: # -*- coding: utf-8 -* import scrapy class RegjeringenNoSpider(scrapy.Spider): '''A spider to craw

我正在使用Scrapy编写一个spider,目前我正在向spider添加合同。spider仍然运行良好,但在合同中添加@returns之后,我在运行检查时得到了奇怪的结果

@returns response 1
运行scrapy check时,我突然得到“未处理的错误被延迟”:

蜘蛛代码:

# -*- coding: utf-8 -*
import scrapy

class RegjeringenNoSpider(scrapy.Spider):
    '''A spider to crawl the Norwegian Government's pages containing news, speeches and opinions'''
    name = "regjeringen_no"
    start_urls = [
        'https://www.regjeringen.no/no/aktuelt/taler_artikler/',
        'https://www.regjeringen.no/no/aktuelt/nyheter/',
    ]

    def parse(self, response):
        '''Parses the response downloaded for each of the requests made. Some
        contracts are mingled with this docstring.

        @url https://www.regjeringen.no/no/aktuelt/taler_artikler/ 
        @url https://www.regjeringen.no/no/aktuelt/nyheter/
        @returns response 1
        '''

        self.logger.info('Parse function called on %s', response.url)

        for href in response.css('li.listItem h2.title a::attr(href)'):
            yield response.follow(href, callback=self.parse_article)

        for href in response.css('li.next a::attr(href)'):
            yield response.follow(href, callback=self.parse)

    def parse_article(self, response):
        '''Parse response for pages with a single article'''
        self.logger.info('Parse article function called on %s', response.url)

        yield {
            'article_title': self._extract_with_css("header.article-header h1::text", response),
            'article_date': self._extract_with_css("div.article-info span.date::text", response),
            'article_type': self._extract_with_css("div.article-info span.type::text", response),
            'article_lead': self._extract_with_css("div.article-ingress p::text", response),
            'article_text': self._extract_with_css("div.article-body::text", response),
        }

    def _extract_with_css(self, query, response):
        return response.css(query).extract_first().strip()
这里有两件事很奇怪。首先,scrapy check的反馈显示0份合同,即使有3份(事实上,合同似乎只有在失败时才被计算在内)。其次是错误消息,这没有多大意义(顺便说一句,错误不会中断检查的执行)。痒虫

注:正在运行

$ scrapy shell "https://www.regjeringen.no/no/aktuelt/taler_artikler/"
给我:

[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x7fbf214b6dd0>
[s]   item       {}
[s]   request    <GET https://www.regjeringen.no/no/aktuelt/taler_artikler/>
[s]   response   <200 https://www.regjeringen.no/no/aktuelt/taler_artikler/id1334/>
[s]   settings   <scrapy.settings.Settings object at 0x7fbf214b6d50>
[s]   spider     <DefaultSpider 'default' at 0x7fbf20e1e1d0>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request and update local objects 
[s]   shelp()           Shell help (print this help)
[s]   view(response)    View response in a browser
>>> 
[s]可用的刮擦对象:
[s] scrapy scrapy模块(包含scrapy.Request、scrapy.Selector等)
[s] 爬虫
[s] 项目{}
[s] 请求
[s] 回应
[s] 背景
[s] 蜘蛛
[s] 有用的快捷方式:
[s] 获取(url[,redirect=True])获取url并更新本地对象(默认情况下,遵循重定向)
[s] 获取(req)获取碎片。请求并更新本地对象
[s] shelp()Shell帮助(打印此帮助)
[s] 查看(响应)在浏览器中查看响应
>>> 

我认为糟糕的异常报告是一个很糟糕的错误。合同仍然被认为是一个新的特征,也是一个新的特征。至于发生了什么:您应该指定
@返回请求1
而不是
@返回响应1
。指定多个
@url
指令对您也不起作用,只会检查第一个url,我不知道如何在不实际扩展合同功能的情况下坦率地解决这个问题。

Thx,@john smith。修复了合同,现在从scrapy check regjeringen_no.那里获得了“0.893s运行1个合同”。这很奇怪,因为有2个合同,但无论如何。。。关于这两个网址;我相信运行程序不会在这里计算
@url
指令,因为它们不会执行自己的任何检查(或者因为它们也会得到运行程序的特殊处理,比如隐式强制),Ok。顺便说一句:我们已经仔细看过了这些文档,它们是非常有限的。这一点,加上有限的错误报告,使得合同不像最初看起来那样易于使用。。。在Scrapy的GitHub上有一些关于这种效果的bug报告。
[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x7fbf214b6dd0>
[s]   item       {}
[s]   request    <GET https://www.regjeringen.no/no/aktuelt/taler_artikler/>
[s]   response   <200 https://www.regjeringen.no/no/aktuelt/taler_artikler/id1334/>
[s]   settings   <scrapy.settings.Settings object at 0x7fbf214b6d50>
[s]   spider     <DefaultSpider 'default' at 0x7fbf20e1e1d0>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request and update local objects 
[s]   shelp()           Shell help (print this help)
[s]   view(response)    View response in a browser
>>>