我最近对网络爬虫感兴趣,但有一件事对我来说不是很清楚。想象一个简单的爬虫,它将获取页面,从中提取链接并将它们排队以供以后以相同的方式处理。
当某些链接不会指向另一个页面而是指向某个资产或其他类型的静态文件时,爬虫如何处理这种情况?它怎么会知道?它可能不想下载这种可能很大的二进制数据,甚至也不想下载 xml 或 json 文件。内容协商如何落入此地?
当我向它发出请求时,我认为内容协商应该在网络服务器端起作用,如果它不能满足我的要求,它应该向我发回 html 响应或错误请求状态,没有其他方法是可以接受的,但这不是它的工作example.com/foo.png
方式Accept: text/html
真实的生活。无论如何,Content-Type: image/png
即使我告诉它我只接受它,它也会将二进制数据发回给我text/html
。为什么网络服务器像这样工作而不是强制我要求的正确响应?
内容协商的实现是否被破坏或应用程序有责任正确实现它?
真正的爬虫是如何工作的?提前发送 HEAD 请求以检查链接另一侧的内容被视为不切实际的资源浪费。