【问题标题】:Python 3, urllib ... Reset Connection Possible?Python 3,urllib ...重置连接可能吗?
【发布时间】:2011-01-09 10:30:57
【问题描述】:

在我的程序的较大规模中,以下代码的目标是过滤掉网页源代码中的所有动态 html

代码sn-p:

try:
    deepreq3 = urllib.request.Request(deepurl3)
    deepreq3.add_header("User-Agent","etc......")
    deepdata3 = urllib.request.urlopen(deepurl3).read().decode("utf8", 'ignore')

下面的代码循环了3次,以判断目标网页是否为Dynamic(源代码间隔变化)。

如果页面是动态的,上面的代码会再循环 15 次并尝试过滤掉动态内容。

问题:

虽然这种过滤方法在 80% 的情况下都有效,但某些页面会重新加载 15 次,并且仍然包含动态代码。然而。如果我手动关闭 Python Shell 并重新执行我的程序,我的“刷新页面方法”无法摆脱的动态 html 将不再存在......它已被我的“刷新页面”替换为新的动态 html方法'无法摆脱。所以我需要知道,这里发生了什么?重新运行我的程序如何导致页面的动态内容发生变化。而且,有什么办法,我可以使用任何“重置连接”命令来重新创建这个......而无需手动重新启动我的应用程序。

感谢您的回复。

更新:

我制作了一个 minu 可执行 html 抓取器,我从主脚本循环运行它。它解决了这个问题,但我仍然很好奇我为什么需要这样做。

【问题讨论】:

  • 看起来可疑地像一个缓存问题。考虑添加.add_header('cache-control': 'no-cache')
  • 谢谢 9000。我希望你的方法能奏效,但它没有。 .add_header('cache-control': 'no-cache') - 导致错误 .add_header('cache-control:', 'no-cache') - 没有错误,但不能解决我的问题。感谢您对它的破解。还有其他人吗?
  • 调试正在发生的事情:print connection.headers 和任何其他信息,以查看重新启动 shell 时发生的变化。如果你能给出一个示例 URL 和确切的代码,我会检查出来。

标签: python python-3.x urllib


【解决方案1】:

读取数据后尝试关闭连接:

try:
    deepreq3 = urllib.request.Request(deepurl3)
    deepreq3.add_header("User-Agent","etc......")
    connection = urllib.request.urlopen(deepurl3)
    deepdata3 = connection.read().decode("utf8", "ignore")
    connection.close()

【讨论】:

  • 感谢 Nightcracker 的建议……我以前试过这个。无济于事。最奇怪的是,当一个 Shell 打开时,我可以无数次重复这个过程,每次结果都是一样的,即相同的捕获的动态代码将被过滤掉......相同的未捕获的动态代码将保留。但是在我重新启动 Shell 的那一刻,旧的未捕获动态代码已被替换为新的未捕获动态代码,直到我再次重新启动 Shell 才消失。我开始认为这是服务器端缓存......但这仍然不能解释如何重新启动
【解决方案2】:

我制作了一个 minu 可执行 html 抓取器,我从主脚本循环运行它。并用它来解决这个问题,但我仍然很好奇我为什么需要这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 2012-09-25
    • 1970-01-01
    • 2011-08-16
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多