lxml未按预期检测到空div

2024-04-26 12:04:26 发布

您现在位置:Python中文网/ 问答频道 /正文

对于下面的输入,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,用于指定分页符。我从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>
"""

Tags: divstringtitlehtmllinetablebodythis
2条回答

您可以使用lxml中的soupparser,仍然使用xpath等处理数据:

from lxml.html.soupparser import fromstring

html_element = fromstring(html_string)

它将维持p内的<div></div>

您需要传递一些附加参数来更改tostring()的行为:

etree.tostring(d, method="html", with_tail=False)
'<div></div>'

相关问题 更多 >