gpt4 book ai didi

python - 使用 Beautifulsoup 提取可变标签列表

转载 作者:行者123 更新时间:2023-12-01 00:43:03 25 4
gpt4 key购买 nike

我有以下结果集:

<p>Cake</p><a>Cream</a><p>Coffee</p>

我还有一本字典:

dic[0]='p'
dic[1]='a'
dic[2]='p'

如何使用列表提取结果集的值?理想情况下,我想获得一本带有

的字典
dic[0]='Cake'
dic[1]='Cream'
dic[2]='Coffee'

基本上,我想连续搜索我的结果集以查找列表中的下一个标签。我可以使用 find_all 但这意味着我必须手动进行映射。

最佳答案

data = '''<p>Cake</p><a>Cream</a><p>Coffee</p>'''

dic = ['p', 'a', 'p']

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

i = iter(dic)

out = {i: tag.text for i, tag in enumerate(soup.find_all(lambda t: t.name == next(i)))}

print(out)

打印:

{0: 'Cake', 1: 'Cream', 2: 'Coffee'}

编辑:如果结果集中有不在搜索列表中的标签,则版本:

data = '''<span>Don't search this</span>
<p>Cake</p>
<span>Don't search this</span>
<a>Cream</a>
<p>Coffee</p>'''

lst = ['p', 'a', 'p']

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

def search(lst):
lst = lst[:]
tag = yield
while lst:
if lst[0] == tag.name:
lst.pop(0)
tag = yield True
continue
tag = yield False

it = search(lst)
next(it)
out = {i: tag.text for i, tag in enumerate(soup.find_all(lambda t: it.send(t)))}

print(out)

打印:

{0: 'Cake', 1: 'Cream', 2: 'Coffee'}

编辑2:使用CSS选择器:

data = '''<span>Don't search this</span>
<p>Cake</p>
<span>Don't search this</span>
<a>Cream</a>
<p>Coffee</p>'''

lst = ['p', 'a', 'p']

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

print({i: tag.text for i, tag in enumerate(soup.select(','.join(lst)))})

打印:

{0: 'Cake', 1: 'Cream', 2: 'Coffee'}

关于python - 使用 Beautifulsoup 提取可变标签列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57190826/

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