【问题标题】:Is it possible to fetch the first few, say 1K, of a webpage using python?是否可以使用 python 获取网页的前几个,比如 1K?
【发布时间】:2012-06-25 04:00:41
【问题描述】:

是否可以使用 python 获取网页的前几个,比如 1K?

非常感谢!

【问题讨论】:

  • 你能再详细一点吗?
  • 我不知道 Python 中有任何特定的功能或库可以轻松实现这一点,但听起来你想要做的只是发出一个 HTTP 请求,读取响应,然后忽略响应中超过 1K 字节的任何内容。本质上,您会在流中读取,并且会在 1K 字节后停止读取。
  • 另见“分块编码”和这篇文章使用urllib2stackoverflow.com/questions/2028517/…

标签: python webpage


【解决方案1】:

Requests 库可让您在响应进入时对其进行迭代,以便您可以执行以下操作:

import requests
beginning = requests.get('http://example.com/').iter_content(1024).next()

如果您只想要标头,您可以随时使用 http HEAD 方法:

req = requests.head('http://example.com')

【讨论】:

  • 这仍然会获取整个页面。不管怎样,requests 是一个很棒的图书馆。
  • @Torsten 查看源代码,它似乎只读取了请求的块大小的套接字。不过,这是一个长长的兔子洞,我不太确定。它去请求 -> urllib3 -> httplib -> 原始套接字,它看起来像它的流式传输。
  • @Trevor。感谢您的澄清。然后我想我的假设是错误的。我从来没有使用过这样的请求。因此,当只执行request.get('...') 而不将其他方法链接到它时,它将下载整个响应。在将 '.iter_content' 应用到它之前,我只是假设这里也是这种情况。
  • @Torsten 似乎它会等到您尝试访问content 属性(或其他类似属性),然后在内部使用iter_content 来构建完整的响应并缓存它。这是我在源代码中寻找的地方:github.com/kennethreitz/requests/blob/develop/requests/…
【解决方案2】:

这是一个使用 Python 3 内置的 urllib.request 的示例。

import urllib.request
url = urllib.request.openurl("http://example.com").read(1024)

【讨论】:

    【解决方案3】:

    当然:

    >>> len(urllib2.urlopen('http://google.com').read(1024))
    1024
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2010-10-09
      • 2019-02-03
      相关资源
      最近更新 更多