我最近对网络爬虫产生了兴趣,但有一件事并不太清楚。想象一个简单的爬虫程序,获取页面,从中提取链接,并以相同方式将它们排队进行后续处理。
当某个链接不会指向另一个页面,而是指向某个资源或其他类型的静态文件时,爬虫程序如何处理呢?它怎么知道这个链接不是它需要的页面呢?毕竟,它可能不希望下载任何大型二进制数据,甚至不希望下载xml或json文件。内容协商在其中扮演着什么角色?
按照我的理解,内容协商应该在web服务器端工作。当我使用
是内容协商实现有问题还是应用程序没有正确实现呢?
真正的爬虫程序是如何工作的呢?向目标链接发送HEAD请求以查看其背后的内容似乎会浪费很多资源。
当某个链接不会指向另一个页面,而是指向某个资源或其他类型的静态文件时,爬虫程序如何处理呢?它怎么知道这个链接不是它需要的页面呢?毕竟,它可能不希望下载任何大型二进制数据,甚至不希望下载xml或json文件。内容协商在其中扮演着什么角色?
按照我的理解,内容协商应该在web服务器端工作。当我使用
Accept: text/html
请求 example.com/foo.png
时,服务器应该返回一个 html 响应或 Bad Request 状态码(如果无法满足我的要求),不能返回其他类型的数据。但实际情况并非如此,即使我告诉服务器我只接受 text/html
,它也会发送回那些二进制数据,而且响应头仍然是 Content-Type: image/png
。为什么web服务器像这样工作,而不强制返回我所需的正确响应?是内容协商实现有问题还是应用程序没有正确实现呢?
真正的爬虫程序是如何工作的呢?向目标链接发送HEAD请求以查看其背后的内容似乎会浪费很多资源。