对于以下输入,lxml
会修改div
,就好像它知道div
不能在p
内。
有人能告诉我如何获得<div></div>
这种输入吗?我想纠正输入HTML。
我是否需要切换到BeautifulSoup
?
from lxml import etree
html_string = """
<html>
<head>
<title></title>
</head>
<body>
<p align="center">
<div></div>
This line should be centered.
</p>
<table>
<tbody>
<tr>
<td>
<div></div>
</td>
</tr>
</tbody>
</table>
</body>
</html>
"""
html_element = etree.fromstring(html_string)
page_break_elements = html_element.xpath("//div")
(Pdb) etree.tostring(html_element[1][0][0])
b'<div/>\n This line should be centered.\n '
我只想让下面的元素移动它。
<div></div>
对于任何好奇的人来说,这些是用于指定分页符的PDF生成div
的分页符<div style="page-break-after:always"></div>
。我收到来自TinyMCE的输入,它没有正确定位,因此我试图将其移动到body
元素。
所需的输出
from lxml import etree
html_string = """
<html>
<head>
<title></title>
</head>
<body>
<div></div>
<p align="center">
This line should be centered.
</p>
<div></div>
<table>
<tbody>
<tr>
<td>
</td>
</tr>
</tbody>
</table>
</body>
</html>
"""
答案 0 :(得分:1)
您可以使用 lxml 中的soupparser并仍然使用xpath等处理数据..:
from lxml.html.soupparser import fromstring
html_element = fromstring(html_string)
这将在{。
中保持<div></div>
答案 1 :(得分:0)
您需要传递一些额外的参数来更改tostring()的行为:
etree.tostring(d, method="html", with_tail=False)
'<div></div>'