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