gpt4 book ai didi

Python HTMLParser - 停止解析

转载 作者:太空狗 更新时间:2023-10-29 16:40:27 27 4
gpt4 key购买 nike

我正在使用 html.parser 模块中的 Python 的 HTMLParser。我正在寻找一个标签,当找到它时停止解析是有意义的。这可能吗?我尝试调用 close(),但我不确定这是否可行。

class MyHTMLParser(HTMLParser):

def handle_starttag(self, tag, attrs):
login_form = False
if tag == "form":
print("finished")
self.close()

然而,这似乎具有以

结尾的递归效果
  File "/usr/lib/python3.4/re.py", line 282, in _compile
p, loc = _cache[type(pattern), pattern, flags]
RuntimeError: maximum recursion depth exceeded in comparison

最佳答案

根据文档,close()方法这样做:

Force processing of all buffered data as if it were followed by an end-of-file mark.

你还在handle_starttag里面并且还没有完成对缓冲区的处理,所以你肯定不想处理所有缓冲数据 - 这就是你陷入递归的原因。您无法从机器内部停止机器。

来自 reset() 的描述这听起来更像你想要的:

Reset the instance. Loses all unprocessed data.

但也不能从它调用的事物中调用它,所以这也显示递归。

听起来你有两个选择:

  • 引发异常(例如 StopIteration )并从您对解析器的调用中捕获它。根据您在解析中所做的其他事情,这可能会保留您需要的信息。您可能需要进行一些检查以查看文件是否未打开。

  • 使用一个简单的标志 ( True/False ) 来表示您是否已中止。在 handle_starttag 的最开始如果中止就退出。所以机器仍然会遍历 html 的所有标签,但不对每个标签做任何事情。显然,如果您正在处理 handle_endtag那么这也会检查标志。当您收到 <html> 时,您可以将标志设置回正常状态。标记或覆盖 feed方法。

关于Python HTMLParser - 停止解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285039/

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