我想写一个尊重robots.txt的爬虫。不幸的是,无头浏览器似乎不支持 robots.txt。我曾和 PhantomJS 的人讨论过,我得到了答案:PhantomJS 是浏览器,不是爬虫,如果你从脚本中使用它,脚本负责尊重 robots.txt。
它是否正确?我在想 robots.txt 必须尊重每个http 请求,而不仅仅是主要的 url。
所以问题:只检查 robots.txt 的主要网址就足够了吗?
我想写一个尊重robots.txt的爬虫。不幸的是,无头浏览器似乎不支持 robots.txt。我曾和 PhantomJS 的人讨论过,我得到了答案:PhantomJS 是浏览器,不是爬虫,如果你从脚本中使用它,脚本负责尊重 robots.txt。
它是否正确?我在想 robots.txt 必须尊重每个http 请求,而不仅仅是主要的 url。
所以问题:只检查 robots.txt 的主要网址就足够了吗?
不,仅检查 robots.txt 的主 URL 是不够的。例如,一个站点可能允许机器人爬取 HTML 页面,但阻止它们访问图像。
这是个问题,不是吗?据我了解,如果你让 PhantomJS 访问一个网页,它不仅会下载页面内容,还会下载任何引用的脚本、图像、样式表等。所以你的脚本验证了爬取主 url 是可以的,但是它不知道网页引用了哪些其他 url。
我建议您查看 PhantomJS API,看看它是否有一个钩子,您可以在其中过滤它请求的 url。也就是说,例如,在 PhantomJS 尝试下载图像之前,它会调用过滤器以查看是否正常。我不知道是否存在这样的功能,但如果存在,那么您可以在那里检查 robots.txt。
如果您的脚本没有过滤 PhantomJS 请求的网址的方法,我建议您找到其他东西来作为您的爬虫的基础。否则会使您的抓取工具访问 robots.txt 明确禁止抓取工具访问的文件。