gpt4 book ai didi

python - urllib2.urlopen() 是否真的获取了页面?

转载 作者:行者123 更新时间:2023-11-28 20:11:32 26 4
gpt4 key购买 nike

当我使用 urllib2.urlopen() 时,我在考虑它只是为了标题读取还是实际上带回了整个网页?

IE 是否在调用 urlopen 或调用 read() 时实际获取 HTML 页面?

handle = urllib2.urlopen(url)
html = handle.read()

我问的原因是为了这个工作流程...

  • 我有一个 url 列表(其中一些具有短 url 服务)
  • 如果我之前没有看到该 url,我只想阅读该网页
  • 我需要调用 urlopen() 并使用 geturl() 获取链接转到的最终页面(在 302 重定向之后),这样我就知道我是否已经抓取了它。
  • 如果我已经解析了该页面,我不想承担必须获取 html 的开销。

谢谢!

最佳答案

我刚刚使用 wireshark 进行了测试。当我调用 urllib2.urlopen('url-for-a-700mbyte-file') 时,立即只检索到 header 和一些正文数据包。直到我调用 read(),主体的大部分才通过网络传来。这与我通过阅读 httplib 模块的源代码看到的相符。

因此,要回答最初的问题,urlopen() 不会通过网络获取整个主体。它获取 header ,通常还获取正文的一些。当您调用 read() 时,正文的其余部分将被提取。

部分主体提取是预料之中的,因为:

  1. 除非您一次读取一个 HTTP 响应一个字节,否则无法确切知道传入 header 的确切长度,因此无法知道在正文开始之前要读取多少字节。

  2. http 客户端无法控制服务器将多少字节捆绑到响应的每个 tcp 帧中。

在实践中,由于一些主体通常与标题一起获取,您可能会发现小主体(例如小 html 页面)完全在 urlopen() 调用时获取。

关于python - urllib2.urlopen() 是否真的获取了页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3009144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com