内容谈判是否破裂?

Kre*_*eki 4 http web-crawler content-negotiation

我最近对网络爬虫感兴趣,但有一点对我来说不是很清楚.想象一个简单的爬虫,它将获取页面,从中提取链接并排队,以便以后以相同的方式处理.

当某些链接不会导致另一个页面而不是某个资产或其他类型的静态文件时,爬虫如何处理这种情况呢?怎么会知道的?它可能不想下载这种可能很大的二进制数据,甚至也不想下载xml或json文件.内容谈判如何落入这个?

怎么我看到的内容协商应该工作是在Web服务器上的一面,当我发出一个请求example.com/foo.pngAccept: text/html它应该给我回一个HTML响应或Bad Request状态,如果它不能满足我的要求,其他什么都可以接受的,但是这不是它是如何工作的现实生活.无论如何,它Content-Type: image/png甚至在我告诉它时我都会将这个二进制数据发回给我,我只接受text/html.为什么网络服务器这样工作而不是强迫我要求的正确回应?

内容协商的实施是否被破坏或者应用程序有责任正确实施它?

真正的抓取工具如何工作?提前发送HEAD请求以检查链接另一端的什么是不切实际的资源浪费.

Eve*_*ert 5

不是'错误请求',正确的响应是406 Not Acceptable.

HTTP规范规定它应该发回这个规范[ 1 ],但是大多数实现都没有这样做.如果你想避免下载你不感兴趣的内容类型,你唯一的选择就是首先做一个HEAD.由于您可能已经抓取了这些图像,因此您也可以进行一些智能猜测,它实际上是一个图像(例如,它出现在<img>标记中).

您也可以正常启动请求,只要您注意到您正在获取二进制数据,请切断TCP连接.但我不确定这是多么好的想法.