【问题标题】:GET html data from multiple urls on website in one connection一次连接从网站上的多个 url 获取 html 数据
【发布时间】:2015-04-22 23:14:21
【问题描述】:

我有一个 python 脚本,它接受几个 url 的输入。我的脚本循环遍历这些 url 并从每个页面打印出 htmltext。网站会将此视为 3 个单独的 GET 请求,因此对站点进行 3 次“点击”,还是会看到套接字连接并将其视为对页面的 1 次“点击”?

我认为这是通过检查调试的第一个选项,如果是这样,是否可以从同一站点上的多个 URL 获取数据,但该站点仅将其视为站点的 1 个“命中”?我可以在 urllib3 中利用 keep-alive 功能来实现这一点吗?

我的脚本如下:

for u in url:
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    req = urllib2.Request(u)
    req.add_header('User-Agent','Mozilla/5.0')
    print urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)).open(req)
    resp = opener.open(req)
    htmltext = resp.read()

【问题讨论】:

    标签: python python-2.7 urllib2 urllib3


    【解决方案1】:

    网站是否会将此视为 3 个单独的 GET 请求并因此对网站进行 3 次“点击”,还是会看到套接字连接并将其视为对页面的 1 次“点击”?

    是的,即使您重用套接字连接,它仍然是 3 个不同的请求(通过一个套接字)。无论您使用了多少连接,服务器的访问日志都会显示 3 个请求。

    重用连接的好处是创建一个新的 TCP 套接字并与服务器协商握手是一个相对昂贵的过程。有时,这比检索 HTTP 响应正文本身要花费更多时间。通过重用连接,您可以在第一次请求后跳过该部分。

    【讨论】:

    • 谢谢 是否可以从 3 个不同的 URL 获取数据但服务器不知道?
    • 服务器必须知道它正在服务的 URL,否则它将如何服务它们?
    • 我希望有办法解决它。因此,是否可以打开与网站的连接并获得连续的 GET?一个示例网站,一旦您浏览到页面,页面中的一些数据会自动更新而不刷新页面,是否可以在 python 中模拟这一点?
    • 不是客户端的限制,而是HTTP协议的设计。只要您说的是 HTTP,每个请求都会由服务器单独解释并相应地记录下来。如果这是一个问题,那么您需要对不同类型的服务器使用不同的协议。 :)
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 2016-11-17
    • 2015-01-15
    • 2016-11-28
    • 2012-02-27
    • 1970-01-01
    • 2021-08-29
    相关资源
    最近更新 更多