gpt4 book ai didi

python - 使用 Python BeautifulSoup 分隔同一 标签内的两个文本

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:32 25 4
gpt4 key购买 nike

我的 HTML 知识非常有限,而且我才刚刚开始学习 Beautiful soup,所以我的问题可能没有正确表达。我的 HTML 源代码看起来像这样

<TD width="15%">Text1</TD>
<TD width="85%">Text2<A href="link1">(6)</A>
Text3<A href="link2">(4)</A>
</TD>

它在网页上显示为 Text1/Text2 和 Text1/Tex3 (可能是由于一些我不理解的代码,我可能没有复制到这里)。

但是,我正在尝试使用 BeautifulSoup 编写 Python 代码来解析 Python 对象中的此信息。我认为第一步只是单独提取文本,然后再合并它们。我可以使用这样的代码轻松提取 Text1

url = "my url (static page stored locally)"
soup = BeautifulSoup(open(url),'lxml')
t1_soup=soup.find_all('td',{'width':'15%'})
t2_soup=soup.find_all('td',{'width':'75%'})


text1_str=[]
for item in t1_soup:
text1_str.append(item.text)


text2_str=[]
for item in t2_soup:
text2_str.append(item.text)

第一个 for 循环干净地给出了 text1,但第二个 for 循环给出了单个字符串“text2 text3”。我不知道如何将它们分开,以便我最终可以将其转换为 text1/text2 和 text1/text3

我编写的Python代码可能也不是很高效,如果您有更好的方法的建议,我将不胜感激。

最佳答案

您可以通过查找 td 中的所有 a 元素并获取 previous text siblings 来解决此问题。 :

for item in t2_soup:
print([a.previous_sibling.strip() for a in item.find_all("a")])

打印[u'text2', u'text3']

或者,您可以非递归地找到每个td中的所有文本节点非递归:

for item in t2_soup:
print([text.strip() for text in item.find_all(text=True, recursive=False)])

这可能会产生额外的空字符串 - 请务必过滤它们。

关于python - 使用 Python BeautifulSoup 分隔同一 <td> 标签内的两个文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40297158/

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