Scrapy не записывает все результаты в CSV - PullRequest
0 голосов
/ 10 мая 2018

Я использую Scrapy, чтобы пропинговать кучу веб-страниц и определить, какие из домашних страниц больше не живут.

Полный код моего паука очень прост и воспроизведен ниже:

class BrokenLinksSpider(scrapy.Spider):
name = 'broken-link-spider'

def __init__(self, id_homepage_mapping, *args, **kwargs):
    self.org_homepages = id_homepage_mapping
    self.download_timeout = 10

def start_requests(self):
    for qId, url in self.org_homepages.items():
        if url.endswith("/"):
            url = url[0:-1]
        yield scrapy.Request(url,
            callback=self.complete_callback,
            errback=self.error_callback,
            dont_filter=True,
            meta={ 'handle_httpstatus_all': True, 'id': id })

def complete_callback(self, response):
    if str(response.status)[0] in ("4", "5"):
        yield BrokenLinkCheckerItem(
            url=response.request.url,
            status=response.status,
            qId=response.meta['id'])

def error_callback(self, failure):
    yield BrokenLinkCheckerItem(
        url=failure.request.url,
        status=repr(failure),
        qId=failure.request.meta['id'])

В журналах моего приложения я вижу в сборщике статистики scrapy, что были исключения с получением около 40 000 ссылок. Однако выходной файл csv, в который я пишу, содержит только около 8 тыс. Строк. Кроме того, файл CSV, кажется, содержит все различные типы исключений, о которых сообщает StatsCollector, только меньшее количество экземпляров каждого из них.

Итак, мой вопрос: почему существует такое расхождение между тем, что сообщает statsCollector, и тем, что фактически записывается в CSV? Учитывая мое понимание функции обратного вызова errback, не должны ли все эти исключения быть записаны в CSV?

Спасибо!

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