gpt4 book ai didi

python - 从 html 中检索尾部文本

转载 作者:行者123 更新时间:2023-12-02 06:20:46 27 4
gpt4 key购买 nike

使用 lxml 的 Python 2.7

我有一些令人讨厌的 html,如下所示:

<td>
<b>"John"
</b>
<br>
"123 Main st.
"
<br>
"New York
"
<b>
"Sally"
</b>
<br>
"101 California St.
"
<br>
"San Francisco
"
</td>

所以基本上它是一个包含大量内容的单一 td。我正在尝试编译姓名及其地址的列表或字典。

到目前为止,我所做的是使用tree.xpath('//td/b')获取带有名称的节点列表。因此,假设我当前位于 John 的 b 节点上。

我正在尝试获取当前节点之后但下一个 b 节点(Sally)之前的所有内容的 whatever.xpath('string()') 。我已经尝试了一堆不同的 xpath 查询,但似乎无法得到正确的结果。特别是,每当我在没有 [] 括号的表达式中使用 and 运算符时,它都会返回一个 bool 值,而不是满足条件的所有节点的列表。有人可以帮忙吗?

最佳答案

这应该有效:

from lxml import etree

p = etree.HTMLParser()
html = open(r'./test.html','r')
data = html.read()
tree = etree.fromstring(data, p)

my_dict = {}

for b in tree.iter('b'):
br = b.getnext().tail.replace('\n', '')
my_dict[b.text.replace('\n', '')] = br

print my_dict

此代码打印:

{'"John"': '"123 Main st."', '"Sally"': '"101 California St."'}

(您可能需要去掉引号!)

您可以使用 lxml 的解析器之一来轻松导航 HTML,而不是使用 xpath。解析器会将 HTML 文档转换为“etree”,您可以使用提供的方法对其进行导航。 lxml 模块提供了一个名为 iter() 的方法它允许您传入标签名称并接收树中具有该名称的所有元素。在您的情况下,如果您使用它来获取所有 <b>元素,然后您可以手动导航到 <br>元素并检索其尾部文本,其中包含您需要的信息。您可以在 lxml.etree tutorial. 的“元素包含文本”标题中找到相关信息。

关于python - 从 html 中检索尾部文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60231484/

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