【问题标题】:Cleanup HTML using lxml and XPath in Python在 Python 中使用 lxml 和 XPath 清理 HTML
【发布时间】:2021-10-22 20:19:21
【问题描述】:

我正在学习 python 和 lxml 工具包。我需要处理本地目录中的多个 .htm 文件(递归)并删除不需要的标签,包括其内容(ID 为“box”、“columnRight”、“adbox”、footer”、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页面example.

【问题讨论】:

  • 目前还不清楚是什么问题。您无法解析 HTML 文件吗?见lxml.de/tutorial.html#parsing-from-strings-and-files
  • @mzjn 我不确定在我的特定情况下正确的语法,因为示例太抽象了。
  • 语法是什么?第一个 sn-p 不是关于清理 HTML,而是关于遍历目录以查找文件。第二个是尝试从xpath() 返回的列表中删除元素。你到底在纠结什么?
  • 我需要递归遍历一个目录,找到所有 .htm 文件,然后使用一些东西来检索 htm 页面并对其进行解析,以删除目标元素。第一个 sn-p 不适合这个目的,所以我编辑了。我不知道如何继续,列出一个树元素,tree = html.parse(path) 并加入第二个 sn-p。

标签: python xpath html-parsing lxml lxml.html


【解决方案1】:

如果不查看您的实际文件很难判断,但请尝试以下操作,看看它是否有效:

首先你不需要两者

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) 

【讨论】:

  • 我测试了,得到错误:Traceback (most recent call last): File "./clean.py", line 9, in <module> tree = etree.parse(name) NameError: name 'etree' is not defined 另外,应该省略第一次导入from lxml import html 或第二次?
  • 第一个问题——我的错;这是一个错字 - 请参阅编辑后的版本(将 etree 更改为 lh)。至于第二个问题 - 只需要import lxml.html as lh.
  • 尝试后得到IOError。实际页面示例在顶部。
  • @triwo 您可能应该将其作为一个单独的问题提出。它与lxml,xpath和html解析无关,它们是您问题中的标签。
  • 这是题外话,但现在没有充分的理由使用 Python 2(除非您必须维护旧的 Python 2 代码库)。
猜你喜欢
  • 1970-01-01
  • 2017-03-29
  • 2012-07-29
  • 2010-12-07
  • 2012-08-23
  • 2020-07-12
  • 2011-02-26
  • 1970-01-01
  • 2014-11-15
相关资源
最近更新 更多