gpt4 book ai didi

python - lxml:当html标签文本内容为None时附加 'None'或Null值

转载 作者:行者123 更新时间:2023-12-01 05:13:46 24 4
gpt4 key购买 nike

尝试读取 html 内容并使用 lxml 将最后一个表的内容提取到数组中.

这是我的最后一个表格:

<table border="1">
<thead>
<tr>
<td><p>T1</p></td>
<td><p>T2</p></td>
<td><p>T3</p></td>
</tr>
</thead>
<tbody>
<tr>
<td><p>A1</p></td>
<td><p></p></td>
<td><p>A3</p></td>
</tr>
</tbody>
</table>

当我运行以下代码时,eol_table值为 ['T1', 'T2', 'T3', 'A1', 'A3'] 。它没有显示 None或当 <p> 时为空白值内容为空。

预期值为['T1', 'T2', 'T3', 'A1', '', 'A3'] 。我怎样才能得到这样的结果?

代码:

eol_html_content =  urlfetch.fetch("https://dl.dropboxusercontent.com/u/7384181/Test.html").content

import lxml.html as LH
html_root = LH.fromstring(eol_html_content)

eol_table = None
for tbl in html_root.xpath('//table'):
eol_table = tbl.xpath('.//tr/td/p/text()')

self.response.out.write(eol_table)

最佳答案

问题的根源在于,xpath 中的 text() 是要检索的元素测试的一部分,并且由于对于某些 p 元素来说它是 None ,因此它未检索。

解决方案是修改 xpath 以选择所有 p 元素,然后从中获取 text

import lxml.html as LH

xmlstr = """
<table border="1">
<thead>
<tr>
<td><p>T1</p></td>
<td><p>T2</p></td>
<td><p>T3</p></td>
</tr>
</thead>
<tbody>
<tr>
<td><p>A1</p></td>
<td><p></p></td>
<td><p>A3</p></td>
</tr>
</tbody>
</table>
"""

html_root = LH.fromstring(xmlstr)

eol_table = None
for tbl in html_root.xpath('//table'):
p_elements = tbl.xpath('.//tr/td/p')
eol_table = [p_elm.text for p_elm in p_elements]

print eol_table

打印:

['T1', 'T2', 'T3', 'A1', None, 'A3']

替代情况,其中某些元素没有

(这个更新的请求是 Nijo 提出的,他还进行了 text_content() 调用)

xmlstr = """
<table border="1">
<thead>
<tr>
<td><p>T1</p></td>
<td><p>T2</p></td>
<td><p>T3</p></td>
</tr>
</thead>
<tbody>
<tr>
<td><p>A1</p></td>
<td><p></p></td>
<td></td>
</tr>
</tbody>
</table>
"""
html_root = LH.fromstring(xmlstr)

eol_table = None
for tbl in html_root.xpath('//table'):
td_elements = tbl.xpath('.//tr/td')
eol_table = [td_elm.text_content() for td_elm in td_elements]
print eol_table

打印什么内容

['T1', 'T2', 'T3', 'A1', '', '']

如您所见,text_content() 永远不会返回 None,但在 None 情况下返回空字符串 ''

关于python - lxml:当html标签文本内容为None时附加 'None'或Null值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23625810/

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