【问题标题】:Python lxml, removing parent elements before outputting HTML (using fragment_fromstring)Python lxml,在输出 HTML 之前删除父元素(使用 fragment_fromstring)
【发布时间】:2013-06-27 04:55:00
【问题描述】:

我正在使用 lxml 解析一些 HTML 片段(来自 RSS 提要),为了有效地执行此操作,我使用了create_parent='div'。当我稍后输出 HTML 时,我不希望包含父 div,因为在我的 html 布局中,它最终成为 div 中的 div,完全没有必要。

现在的代码:

from lxml.html import fragment_fromstring

html = fragment_fromstring(html_string, create_parent = 'div')

for tag in html.xpath('//*[@class]'):
    tag.attrib.pop('class')
for tag in html.xpath('//*[@id]'):
    tag.attrib.pop('id')

return lxml.html.tostring(html)

TL;DR:如何在输出时删除包装 div?

【问题讨论】:

  • 这可能是答案;通过跨过它并将孩子传递进来“删除包装 div”:lxml.etree.tostring( html_doc.xpath('*')[0] )。警告:未经测试的代码。仅使用 python lxml 15 年。对代码更改进行测试的人应该写下答案。

标签: python html-parsing lxml lxml.html


【解决方案1】:

提取子元素。

return '\n'.join(lxml.html.tostring(x) for x in html.iterchildren())

【讨论】:

  • 但这不是提取文本节点
  • @Hemant_Negi,你想要类似:html.text_content().strip() 吗?
  • 我想要元素里面的所有内容。可以包含 html 节点作为文本。我认为这只是返回文本。
  • @Hemant_Negi,在this answer 中尝试解决方案。如果这不能解决您的问题,请发布一个单独的问题,以便其他人可以帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多