我用 python 写了一个爬虫,抓取的 url 有不同的类型:它可以是带有 html 的 url 和带有图像或大文件或其他文件的 url。所以我需要快速确定这种情况,以防止读取大文件(如大文件)并继续爬行。在页面加载开始时确定 url 类型的最佳方法是什么? 我知道我可以通过 url 名称(以 .rar .jpg 等结尾)来做什么,但我认为这不是完整的解决方案。我需要检查标题或类似的东西吗?我还需要一些页面大小预测来防止大量下载。换句话说,设置下载页面大小的限制,以防止快速占用内存。
最佳答案
如果您对资源使用 HTTP HEAD 请求,您将获得资源的相关元数据,而无需资源数据本身。具体来说,content-length 和 content-type header 会很有趣。
例如
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 类型)。足够的信息供您决定是否要获取完整资源。
此外,此 header 告诉您服务器接受 HTTP 部分内容请求(accept-ranges header ),这允许您批量检索数据。
如果您直接执行 GET,您将获得相同的 header 信息,但这也会开始在响应正文中发送资源数据,这是您要避免的事情。
如果您想了解有关 HTTP header 及其含义的更多信息,可以使用在线工具,例如 'Fetch'
关于python检查url类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3695018/