解析带有封闭标签的 HTML table (lxml, XPath)
Parsing HTML table (lxml, XPath) with enclosed tags
任务是解析大 HTML tables,所以我将 lxml 与 XPath 查询一起使用。有时 table 单元格可以包含封闭的标签(例如 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 的最后 child 或以某种方式设置解析器。
使用cell.xpath('string()')
代替cell.text
来简单地读出每个单元格的字符串值。
任务是解析大 HTML tables,所以我将 lxml 与 XPath 查询一起使用。有时 table 单元格可以包含封闭的标签(例如 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 的最后 child 或以某种方式设置解析器。
使用cell.xpath('string()')
代替cell.text
来简单地读出每个单元格的字符串值。