Контракты Scrapy - необработанная ошибка в отложенном - PullRequest
0 голосов
/ 01 октября 2018

Я пишу паука, используя Scrapy, и в настоящее время я добавляю контракты к пауку.Паук все еще работает нормально, но я получаю странные результаты при запуске проверок, после добавления @ возвращает в контрактах.

@returns response 1

Я внезапно получаю "Необработанная ошибка отложена" при запуске проверка скрапа :

$ scrapy check regjeringen_no

----------------------------------------------------------------------
Ran 0 contracts in 0.000s

OK
Unhandled error in Deferred:

Код паука:

# -*- 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 ошибки?

Примечание: Запуск

$ 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
>>> 

1 Ответ

0 голосов
/ 01 октября 2018

Я ожидаю, что плохое сообщение об исключении здесь является ошибкой.Контракты по-прежнему считаются новой функцией и также довольно ограничены .Что касается того, что происходит: вы должны указать @returns requests 1, а не @returns responses 1.Указание нескольких директив @url также не будет работать для вас, и будет проверен только первый URL-адрес, я не уверен, как откровенно решить этот вопрос без фактического расширения функциональности контрактов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...