Python 3,urllib... 可以重置连接吗?

2 投票
2 回答
1810 浏览
提问于 2025-04-16 09:39

在我程序的整体设计中,下面这段代码的目的是从网页的源代码中筛选出所有动态的HTML内容。

代码片段:

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

这段代码会循环执行3次,以判断目标网页是否是动态的(也就是说,源代码会在一定时间间隔内发生变化)。

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

问题:

虽然这种过滤方法在80%的情况下有效,但有些网页会在这15次循环中全部重新加载,依然包含动态代码。然而,如果我手动关闭Python Shell,然后重新运行我的程序,那些我通过“刷新页面方法”无法去掉的动态HTML就不见了……它们被新的动态HTML替代,而这些新的动态HTML我的“刷新页面方法”也无法去掉。所以我想知道,这到底是怎么回事?为什么重新运行我的程序会导致网页的动态内容发生变化?有没有什么方法,或者说“重置连接”的命令,可以让我在不手动重启应用的情况下实现这个效果呢?

谢谢你的回复。

更新:

我制作了一个小型的可执行HTML抓取工具,并在主脚本中循环运行它。这个方法解决了我的问题,但我仍然很好奇为什么我需要这样做。

2 个回答

0

我做了一个小工具,可以抓取网页内容,并且我在主程序里让它循环运行。我用这个工具来解决一个问题,但我还是很好奇,为什么我需要这样做。

0

试着在读取完数据后关闭连接:

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()

撰写回答