gpt4 book ai didi

python - python 查找两个标签之间的所有内容

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:02 24 4
gpt4 key购买 nike

<p>This is the first paragraph with some details</p>
<p><a href = "user123">user1</a><font>This is opening contents for user1</font></p>
<p><font>This is the contents from user1</font></p>
<font><p>This is more content from user1</p></font>
<p><a href = "user234">user2</a><font>This is opening contents for user2</font></p>
<p><font>This is the contents from user2</font></p>
<font><p>This is more content from user1</p></font>
!----There is n number of data like this-----!

这是我的html的结构。我的目标是提取用户及其内容。在这种情况下,它应该打印两个“a”标签之间的所有内容。这只是我的结构的一个示例,但在真正的 html 中,我在两个“a”标签之间有不同类型的标签。我需要一个解决方案来迭代“a”标签下面的所有标签,直到找到另一个“a”标签。希望这是清楚的。

我尝试过的代码是:

for i in soup.findAll('a'):
while(i.nextSibling.name!='a'):
print i.nextSibling

我返回一个无限循环。因此,如果有人知道如何解决这个问题,请与我分享。

预期输出是:

用户名是:user1

文本是:这是 user1 的打开内容 这是 user1 的内容 这是 user1 的更多内容

用户名是:user2

文本是:这是 user2 的打开内容 这是 user2 的内容 这是 user2 的更多内容

等等……

最佳答案

一个选项是搜索每个 <a>标记为 find_all()对于每个链接使用 find_all_next()搜索 <font>包含每个用户内容的标签。以下脚本提取用户名及其内容并将两者保存为列表中的元组:

from bs4 import BeautifulSoup

l = []

soup = BeautifulSoup(open('htmlfile'))
for link in soup.find_all('a'):
s = []
for elem in link.find_all_next(['font', 'a']):
if elem.name == 'a':
break
s.append(elem.string)
user_content = ' '.join(s)
l.append((link.string, user_content))

它产生:

[('user1', 'This is the contents from user1 This is more content from user1'),
('user2', 'This is the contents from user2 This is more content from user2')]

关于python - python 查找两个标签之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557980/

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