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
词典中。不过,请注意你把它放在中间件链中的哪个位置!要关闭引擎,您可能会错过其他地方处理的日志记录异常。远离引擎,您可能会记录重试或以其他方式解决的异常。你把它放在哪里将取决于你需要它的地方。