如何用 Python 解析 HTML
用一些简单的脚本,可以很容易地清理文档和其它大量的 HTML 文件。但是首先你需要解析它们。
作为 Scribus 文档团队的长期成员,我要随时了解最新的源代码更新,以便对文档进行更新和补充。 我最近在刚升级到 Fedora 27 系统的计算机上使用 Subversion 进行检出操作时,对于下载该文档所需要的时间我感到很惊讶,文档由 HTML 页面和相关图像组成。 我恐怕该项目的文档看起来比项目本身大得多,并且怀疑其中的一些内容是“僵尸”文档——不再使用的 HTML 文件以及 HTML 中无法访问到的图像。
我决定为自己创建一个项目来解决这个问题。 一种方法是搜索未使用的现有图像文件。 如果我可以扫描所有 HTML 文件中的图像引用,然后将该列表与实际图像文件进行比较,那么我可能会看到不匹配的文件。
这是一个典型的图像标签:
<img src="https://archive.linux.cn/images/edit_shapes.png" alt="Edit examples" align="left">
我对 src=
之后的第一组引号之间的部分很感兴趣。 在寻找了一些解决方案后,我找到一个名为 BeautifulSoup 的 Python 模块。 脚本的核心部分如下所示:
soup = BeautifulSoup(all_text, 'html.parser')
match = soup.findAll("img")
if len(match) > 0:
for m in match:
imagelist.append(str(m))
我们可以使用这个 findAll
方法来挖出图片标签。 这是一小部分输出:
<img src="https://archive.linux.cn/images/pdf-form-ht3.png"><img src="https://archive.linux.cn/images/pdf-form-ht4.png"><img src="https://archive.linux.cn/images/pdf-form-ht5.png"><img src="https://archive.linux.cn/images/pdf-form-ht6.png"><img alt="GSview - Advanced Options Panel" src="https://archive.linux.cn/images/gsadv1.png" title="GSview - Advanced Options Panel"><img alt="Scribus External Tools Preferences" src="https://archive.linux.cn/images/gsadv2.png" title="Scribus External Tools Preferences">
到现在为止还挺好。我原以为下一步就可以搞定了,但是当我在脚本中尝试了一些字符串方法时,它返回了有关标记的错误而不是字符串的错误。 我将输出保存到一个文件中,并在 KWrite 中进行编辑。 KWrite 的一个好处是你可以使用正则表达式(regex)来做“查找和替换”操作,所以我可以用 \n0:
for m in match:
imagelist.append(m)