如何处理Scrapy中的DNSLookupError?

Rai*_*lam 0 scrapy web-scraping python-3.x scrapy-splash

我正在检查一堆网站响应状态并将它们导出到 CSV 文件。有几个网站没有找到网站DNSLookupError,也没有在 CSV 文件中存储任何内容。如何将消息与 URL 一起存储到 CSV 中?DNSLookupError

def parse(self, response):
    yield {
        'URL': response.url,
        'Status': response.status
    }
Run Code Online (Sandbox Code Playgroud)

小智 5

您可以使用该errback函数捕获 DNS 错误或任何其他类型的错误。请参阅下面的示例用法。

import scrapy
from twisted.internet.error import DNSLookupError


class TestSpider(scrapy.Spider):
    name = 'test'
    allowed_domains = ['example.com']

    def start_requests(self):
        yield scrapy.Request(url="http://example.com/error", errback=self.parse_error)

    def parse_error(self, failure):
        if failure.check(DNSLookupError):
            # this is the original request
            request = failure.request
            yield {
                'URL': request.url,
                'Status': failure.value
            }


    def parse(self, response):
        yield {
            'URL': response.url,
            'Status': response.status
        }
Run Code Online (Sandbox Code Playgroud)