使用封闭的标记解析 HTML 表(lxml、XPath)

Parsing HTML table (lxml, XPath) with enclosed tags

提问人:pupinho 提问时间:1/14/2022 更新时间:1/14/2022 访问量:462

问:

任务是解析大型 HTML 表,因此我将 lxml 与 XPath 查询一起使用。有时,表格单元格可以包含封闭的标签(例如 SPAN)

<html>
  <table>
    <tr>
      <td>1</td>
      <td>2</td>
    </tr>
    <tr>
      <td><span>3</span></td>
      <td>4</td>
    </tr>
  </table>
</html>

我不知道如何以正确的方式处理它。 我的 Python 代码

from lxml import etree
from io import StringIO

html_text = '<html><table><tr><td>1</td><td>2</td></tr><tr><td><span>3</span></td><td>4</td></tr></table></html>'

parser = etree.HTMLParser()
tree = etree.parse(StringIO(html_text), parser)
rows = tree.xpath('//tr')

for row in rows:
    row_values = []
    for cell in row:
        row_values.append(cell.text)
    print(row_values)

生成

['1', '2']
[None, '4']

您能否介绍一下如何以适当的方式处理此类问题(封装标签)? 据我所知,我必须获得TD的最后一个子项或以某种方式设置解析器。

python xpath html 解析 lxml

评论


答:

1赞 Martin Honnen 1/14/2022 #1

用于 代替 简单地读出每个单元格的字符串值。cell.xpath('string()')cell.text