昨天我遇到了一个有趣的问题,一个同事的代码中出现了一个报错,报错信息为:[scrapy.spidermiddlewares.offsite] DEBUG: Filtered offsite request to...。
在这篇技术分享中,我将分享这个问题的背景和解决方法。
首先,让我们来解释一下报错信息的含义。[scrapy.spidermiddlewares.offsite]
是指Scrapy框架中的一个中间件,用于过滤掉发送到站点外部的请求。而DEBUG: Filtered offsite request to
则是提示我们一个请求被过滤掉了。
接下来,我将解释一下这个问题的原因。在Scrapy中,当我们使用start_urls
来定义爬取的起始链接时,Scrapy默认只会处理与这些链接同域的请求。如果爬虫在爬取过程中产生了站外的请求,Scrapy就会通过Filtered offsite request to
的方式将这些请求过滤掉。
为了解决这个问题,我们需要调整Scrapy的配置,允许处理站外的请求。我们可以通过修改middleware.py
文件来完成这个操作。以下是修改的示例代码:
from scrapy.spidermiddlewares import OffsiteMiddleware
class CustomOffsiteMiddleware(OffsiteMiddleware):
def should_follow(self, request, spider):
# 允许处理站外请求
return True
在上述代码中,我们继承了OffsiteMiddleware
类,并重写了sho