python检查网址类型

时间:2010-09-12 13:30:39

标签: python

我在python中编写了一个爬虫,获取的url有不同的类型:它可以是带有html和url的url,带有图像或大档案或其他文件。所以我需要快速确定这种情况,以防止读取大档案等大文件并继续抓取。如何在页面加载开始时确定URL类型的最佳方法? 我明白我可以用url名称做什么(结尾是.rar .jpg等),但我认为这不是完整的解决方案。我需要检查标题或类似的东西吗?我也需要一些页面大小预测来防止大量下载。换句话说,设置下载页面大小的限制,以防止快速记忆进食。

1 个答案:

答案 0 :(得分:6)

如果对资源使用HTTP HEAD请求,则将在没有资源数据本身的情况下获取资源上的相关元数据。具体来说,内容长度和内容类型标题将是有意义的。

E.g。

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在

>>> 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字节的图像(image / * mime-type)。有足够的信息供您决定是否要获取完整资源。

此外,此标头告诉您服务器接受HTTP部分内容请求(接受范围标头),该请求允许您批量检索数据。

如果您直接进行GET,您将获得相同的标题信息,但这也将开始在响应正文中发送资源数据,这是您想要避免的。

如果您想了解有关HTTP标头及其含义的更多信息,可以使用在线工具,例如'Fetch'