我在python中编写了一个爬虫,获取的url有不同的类型:它可以是带有html和url的url,带有图像或大档案或其他文件.所以我需要快速确定这种情况,以防止读取大档案等大文件并继续抓取.如何在页面加载开始时确定URL类型的最佳方法?我明白我可以用url名称做什么(结尾是.rar .jpg等),但我认为这不是完整的解决方案.我需要检查标题或类似的东西吗?我也需要一些页面大小预测来防止大量下载.换句话说,设置下载页面大小的限制,以防止快速记忆进食.
如果在资源上使用HTTP HEAD请求,则将在没有资源数据本身的情况下获取资源上的相关元数据.具体而言,内容长度和内容类型标题将是有意义的.
例如
HEAD /stackoverflow/img/favicon.ico HTTP/1.1 host: sstatic.net HTTP/1.1 200 OK Cache-Control: max-age=604800 Content-Length: 1150 Content-Type: image/x-icon Last-Modified: Mon, 02 Aug 2010 06:04:04 GMT Accept-Ranges: bytes ETag: "2187d82832cb1:0" X-Powered-By: ASP.NET Date: Sun, 12 Sep 2010 13:38:36 GMT
您可以使用httplib在python中执行此操作:
>>> import httplib >>> conn = httplib.HTTPConnection("sstatic.net") >>> conn.request("HEAD", "/stackoverflow/img/favicon.ico") >>> res = conn.getresponse() >>> print res.getheaders() [('content-length', '1150'), ('x-powered-by', 'ASP.NET'), ('accept-ranges', 'bytes'), ('last-modified', 'Mon, 02 Aug 2010 06:04:04 GMT'), ('etag', '"2187d82832cb1:0"'), ('cache-control', 'max-age=604800'), ('date', 'Sun, 12 Sep 2010 13:39:26 GMT'), ('content-type', 'image/x-icon')]
这告诉你它是1150字节的图像(图像/*mime类型).有足够的信息供您决定是否要获取完整资源.
此外,此标头告诉您服务器接受HTTP部分内容请求(接受范围标头),该请求允许您批量检索数据.
如果直接执行GET,您将获得相同的标头信息,但这也将开始在响应正文中发送资源数据,这是您要避免的.
如果您想了解有关HTTP标头及其含义的更多信息,可以使用在线工具,例如"Fetch"