使用Python搜索特定的HTML字符串

1 投票
3 回答
1492 浏览
提问于 2025-04-15 21:14

要写一个Python程序,去搜索成百上千个HTML文档,并删除指定的HTML字符串,应该使用哪些模块呢?

举个例子,如果我有一个HTML文档里面有<a href="test.html">Test</a>,我想把这个内容从所有包含它的HTML页面中删除。

任何帮助都非常感谢,我并不需要别人为我写程序,只希望能得到一些有用的建议。

3 个回答

0

htmllib

这个模块定义了一个类,可以用来解析用超文本标记语言(HTML)格式的文本文件。这个类本身不直接处理输入输出,它需要通过一个方法接收字符串形式的输入,并且会调用一个“格式化器”对象的方法来生成输出。HTMLParser类的设计是为了作为其他类的基础类,以便添加更多功能,并且它的大部分方法都可以被扩展或重写。这个类是从sgmllib模块中的SGMLParser类派生出来的,并对其进行了扩展。HTMLParser的实现支持RFC 1866中描述的HTML 2.0语言。

1

BeautifulSoup 或者 lxml

5

如果你要找的字符串在HTML中是字面上存在的,那么简单的字符串替换就可以了:

old_html = open(html_file).read()
new_html = old_html.replace(my_string, "")
if new_html != old_html:
    open(html_file, "w").write(new_html)

举个例子,假设你在找“Test”,你想要它匹配这些HTML片段吗?:

<a href='test.html'>Test</a>
<A HREF='test.html'>Test</A>
<a href="test.html" class="external">Test</a>
<a href="test.html">Tes&#116;</a>

等等:“相同”的HTML可以用很多不同的方式来表示。如果你知道HTML中使用的确切字符,那么简单的字符串替换就没问题。如果你需要在HTML的语义层面上进行匹配,那就需要用到更高级的工具,比如BeautifulSoup。不过,这样的话,即使是没有被删除的部分,最终得到的HTML也可能和你最开始的很不一样,因为整个文件会被解析并重新构建。

如果你想在很多文件上执行代码,可以使用os.path.walk来在文件树中查找文件,或者用glob.glob来匹配文件名和类似于命令行的通配符模式。

撰写回答