Python Scrapy:如何判断robots.txt是否存在

Python Scrapy:如何判断robots.txt是否存在,python,scrapy,robots.txt,Python,Scrapy,Robots.txt,我知道我可以自己用python检查robots.txt文件是否存在并触发http(s)请求。由于Scrapy正在检查和下载它,以便让爬行器遵守其中的规则,因此爬行器类中是否有一个属性、方法或任何东西可以让我知道给定网站是否存在robots.txt进行爬网 尝试使用爬虫统计信息: 看 我对有和没有robots.txt的网站做了一些测试,我可以看到robots.txt存在的正确信息。例如,在Spider类中的Spider关闭信号处理程序中,记录self.crawler.stats.\uuuu dic

我知道我可以自己用python检查robots.txt文件是否存在并触发http(s)请求。由于Scrapy正在检查和下载它,以便让爬行器遵守其中的规则,因此爬行器类中是否有一个属性、方法或任何东西可以让我知道给定网站是否存在robots.txt进行爬网

尝试使用爬虫统计信息:

我对有和没有robots.txt的网站做了一些测试,我可以看到robots.txt存在的正确信息。例如,在Spider类中的Spider关闭信号处理程序中,记录self.crawler.stats.\uuuu dict\uuuuu,我看到:

“robotstxt/response\u status\u count/200”:1
带有robots.txt的网站
“robotstxt/response\u status\u count/404”:1
没有robots.txt的网站

如果爬行期间爬行器遇到多个域,并且统计结果类似于:

"robotstxt/response_status_count/200": 1,
"robotstxt/response_status_count/301": 6,
"robotstxt/response_status_count/404": 9,
"robotstxt/response_status_count/403": 1

但我无法将HTTP状态码响应映射到域…

我不这么认为,您可能必须基于
RobotsTxtMiddleware
制作一个自定义中间件。它有方法
\u parse\u robots
\u robots\u error
,您可能可以使用它们来确定robots.txt是否存在


谢谢菲利克斯。我用更多的细节编辑了我的问题。你说得对,除了使用一个定制中间件捕获robots.txt请求并最终在某处写入统计数据之外,没有其他方法(在Scrapy内部)可以拦截响应。我已经创建了那个简单的中间件,它可以工作,但我不喜欢为我的目标观察每一个琐碎的请求。可能在我的工具(Scrapy只是其中的一个组件)中,我只会发出HTTP(s)请求,而不会使用中间件。也许对原始的RobotsTxtMiddleware进行PR以获取这些信息会很有用。我将在github上调试它们:)
"robotstxt/response_status_count/200": 1,
"robotstxt/response_status_count/301": 6,
"robotstxt/response_status_count/404": 9,
"robotstxt/response_status_count/403": 1