gpt4 book ai didi

python - 解析lxml中的html正文片段

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:33 25 4
gpt4 key购买 nike

我正在尝试解析 html 片段:

<body><h1>title</h1><img src=""></body>

我使用 lxml.html.fromstring .它让我发疯,因为它一直在剥离 <body>我的片段的标签:

 > lxml.html.fromstring('<html><h1>a</h1></html>').tag
'html'
> lxml.html.fromstring('<div><h1>a</h1></div>').tag
'div'
> lxml.html.fromstring('<body><h1>a</h1></body>').tag
'h1'

我也试过 document_fromstring , fragment_fromstring , clean_htmlpage_structure=False等等...没有任何效果。

我需要使用 lxml,因为我要将 html 片段传递给 PyQuery。

我只是希望 lxml 不会弄乱我的 html 片段。有可能吗?

最佳答案

.fragment_fromstring()删除 <html>标签也是如此;基本上,只要您有 HTML 文档(带有 <html> 顶级元素和/或文档类型),.fromstring()回到 .fragment_fromstring()并且该方法同时删除了 <html><body>标签,总是。

解决方法是告诉.fragment_fromstring()给你一个<body> 父级标签:

>>> lxml.html.fragment_fromstring('<body><h1>a</h1></body>', create_parent='body')
<Element body at 0x10d06fbf0>

这不会保留原始 <body> 上的任何属性标签。

另一种解决方法是使用 .document_fromstring()方法,它将您的文档包装在 <html> 中标签,然后您可以再次将其删除:

>>> lxml.html.document_fromstring('<body><h1>a</h1></body>')[0]
<Element body at 0x10d06fcb0>

确实保留了 <body> 上的属性:

>>> lxml.html.document_fromstring('<body class="foo"><h1>a</h1></body>')[0].attrib
{'class': 'foo'}

使用 .document_fromstring()你的第一个例子的功能给出:

>>> body = lxml.html.document_fromstring('<body><h1>title</h1><img src=""></body>')[0]
>>> lxml.html.tostring(body)
'<body><h1>title</h1><img src=""></body>'

如果你只想在没有没有 HTML 标签的情况下执行此操作,请执行 lxml.html.fromstring()执行并测试完整文档:

htmltest = lxml.html._looks_like_full_html_bytes if isinstance(inputtext, str) else lxml.html._looks_like_full_html_unicode
if htmltest(inputtext):
tree = lxml.html.fromstring(inputtext)
else:
tree = lxml.html.document_fromstring(inputtext)[0]

关于python - 解析lxml中的html正文片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com