python - 如何从网页中提取内容及其父 HTML 元素?
问题描述
假设您有一个网页:
<html>
<head>
<meta name="description" content="Hello World Test">
</head>
<body>
<h1>Hello World!!!</h1>
<p>How are you today?</p>
<p>What have you been up to?</p>
</body>
</html>
有没有办法循环遍历页面上的节点,然后,如果节点包含文本,则提取文本?
然后我想通过它的 Xpath 来组织文本。
所以上面将是:
/html/body/h1:世界你好!!!
/html/body/p[1]:你今天好吗?
/html/body/p[2]:你最近在做什么?
非常感谢
解决方案
您可以使用例如lxml
库中的 XPath 来迭代所有 HTML 节点,如果迭代节点包含任何文本,则使用路径检索内容:
from lxml import html
tree = html.fromstring("""
<html>
<head>
<meta content="Hello World Test" name="description"/>
</head>
<body>
<h1>Hello World!!!</h1>
<p>How are you today?</p>
<p>What have you been up to?</p>
</body>
</html>
""")
for node in tree.iter():
if node.text and node.text.strip():
print(node.getroottree().getpath(node), node.text)
/html/body/h1 你好世界!!!
/html/body/p[1] 你今天好吗?
/html/body/p[2] 你在做什么?
推荐阅读
- shell - 有什么办法可以在 gcloud ssh --command 参数中给出多行?
- python - 如何为列表列的每个元素总结来自熊猫数据框的整数列的值?
- javascript - Vue JS:SSR 中的 window.location 备用
- json - URI.open 无法获取 reddit JSON(错误 429)
- charts - 如何翻转谷歌图表中的值
- scorm - 使用 SCORM API 从 Brightspace LMS 检索值
- uml - 是否有 OCLE 2.0 的替代方案?
- json - 当用户在 Angular 中输入 ng2-smart-table 字段列时如何验证 JSON 格式?
- unit-testing - 是否可以更改类接口以提高可测试性
- azure - 使用 VS Code 连接到 TFS