python - 在 Python 中使用 lxml 和 XPath 清理 HTML
问题描述
我正在学习 python 和 lxml 工具包。我需要处理本地目录中的多个 .htm 文件(递归)并删除不需要的标签,包括其内容(ID 为“box”、“columnRight”、“adbox”、页脚“、div class="box”的 div,以及所有样式表和脚本)。不知道该怎么做。我有列出目录中所有 .htm 文件的代码:
#!/usr/bin/python
import os
from lxml import html
import lxml.html as lh
path = '/path/to/directory'
for root, dirs, files in os.walk(path):
for name in files:
if name.endswith(".htm"):
doc=lh.parse(filename)
所以我需要添加部分,创建一个树,处理 html 并删除不必要的 div,比如
for element in tree.xpath('//div[@id="header"]'):
element.getparent().remove(element)
如何为此调整代码?
html 页面示例。
解决方案
如果没有看到您的实际文件很难判断,但请尝试以下操作,看看它是否有效:
首先你不需要两者
from lxml import html
import lxml.html as lh
所以你可以放弃第一个。然后
for root, dirs, files in os.walk(path):
for name in files:
if name.endswith(".htm"):
tree = lh.parse(name)
root = tree.getroot()
for element in root.xpath('//div[@id="header"]'):
element.getparent().remove(element)
推荐阅读
- python - 根据条件更改数据框行中的值
- python - 如何保存由 zelle 图形模块制作的动画?
- python - 如何约束和验证 Django m2m 和外键字段
- php - 如何在 CakePHP 的实体虚拟字段中使用 API 生成的值?
- c# - 是否所有版本的 Auto-Fixture 都依赖于 .NET Framework?
- javascript - 获取 null 不是对象(评估 'RNFusedLocation.getCurrentPosition')
- google-apps-script - 在 Google Apps 脚本中使用缓存
- sentry - Sentry:下载小型转储
- reactjs - 调度时如何不覆盖 Redux 的状态
- flutter - 如何制作一个包含在整个屏幕上拉伸的背景图像的颤动应用程序,带有返回句子的图像的圆形按钮?