Scrapy没有这样的主机履带

问题描述:

我使用这个履带,我的基地crowler https://github.com/alecxe/broken-links-checker/blob/master/broken_links_spider.pyScrapy没有这样的主机履带

它创建赶上404个错误域和保存。 我想修改它一点点,并使其寻找“没有这样的主机”的错误,这是错误12002.

但是,与此代码,Scrapy没有收到任何回应(因为没有一个主机返回一个响应),当scrapy遇到这样的域时,它返回

未找到:[Errno 11001] getaddrinfo失败。

如何捕获这个未找到的错误并保存域名?

这不是非常优雅的解决方案(它需要手动工作),但它为我工作,所以让我提起它。

我用Scrapy来收集我想检查的链接。

然后我抓取了这些抓取的数据(以CSV格式),并在Sublime Text中对其进行了清理(将所有数据转换为小写字母,删除任何格式不正确的URL等)。我将该文件保存为纯文本(.TXT),并在Bash shell中使用sort $ sort -u my-list-of-link.txt 然后,我创建了另一个蜘蛛,其中列出了这些URL作为start_urls

我运行了这个蜘蛛,当它完成时,我复制并粘贴了我的shell的日志输出到Sublime Text中的新文件。然后,我在对我感兴趣的错误代码上做了“全部找到”。

选择错误代码的所有实例后,我只是将选择扩展到整个行,然后将其复制并粘贴到另一个纯文本文件中,该文件等同于返回的所有链接/域的列表错误代码,我感兴趣。

处理请求时发生的异常通过Downloader Middleware,例如请求和响应对象,通过process_exception()方法处理。

下会记录所有的异常(包括当IgnoreRequest提高)到一个日志文件

class ExceptionLog(Object): 

    def process_exception(self, request, exception, spider): 
     with open('exceptions.log', 'a') as f: 
      f.write(str(exception) + "\n") 

展开它使用的信号,呼吁更好的文件处理通常spider_opened()spider_closed(),或通过从您的settings.py文件(例如自定义EXCEPTIONS_LOG = ...)中设置。

将此内容添加到您的设置文件中的您的DOWNLOADER_MIDDLEWARES词典中。不过,请注意你把它放在中间件链中的哪个位置!要关闭引擎,您可能会错过其他地方处理的日志记录异常。远离引擎,您可能会记录重试或以其他方式解决的异常。你把它放在哪里将取决于你需要它的地方。