python检查url类型

标签 python

我用 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/

相关文章:

python - 使用pyodbc将值从Python应用程序插入Access 2003数据库

python - 为什么此 python 代码中的内存使用量增加?

python - 重新排序 numpy 数组索引

python - 是否可以在棉花糖中定义具有互斥字段的嵌套模式?

python - 从子类访问python父类变量

python - 如何使用 AWS Web API 和 Lambda 验证无服务器 Web 请求?

python - 在给定条件下向 pandas DataFrame 添加值

python - nodelay() 导致 python curses 程序退出

python - 从 Dataframe 中提取不同的值并将它们插入到具有相同列名称的新 Dataframe 中

python模拟副作用返回值