任何人都可以帮助我使用 beautifulsoup 将风味和品牌详细信息作为关键值对。我是新来的:
期望的输出是
口味-青苹果
品牌-Carabau
html 看起来像这样: HTML 代码 -
<tr class="a-spacing-small">
<td class="a-span3">
<span class="a-size-base a-text-bold">Flavour</span>
</td>
<td class="a-span9">
<span class="a-size-base">Green Apple</span>
</td>
<tr class="a-spacing-small">
<td class="a-span3">
<span class="a-size-base a-text-bold">Brand</span>
</td>
<td class="a-span9">
<span class="a-size-base">Carabau</span>
</td>
我将数据作为
html
,您可以在相应标签上使用find
方法来获取准确的数据,您也可以使用find_next()
替代
html="""<tr class="a-spacing-small">
<td class="a-span3">
<span class="a-size-base a-text-bold">Flavour</span>
</td>
<td class="a-span9">
<span class="a-size-base">Green Apple</span>
</td>
</tr>"""
代码:
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,"html.parser")
dict={}
data=soup.find("td",class_="a-span3").find_next().text
data1=soup.find("td",class_="a-span9").find("span",class_="a-size-base").text
print(data+" - "+data1)
dict[data]=data1
输出:
Flavour - Green Apple
你可以这样做。
选择
<tr>
并使用 .stripped_strings
获取 <tr>
中的字符串列表。
注意:如果您有多个
<tr>
,请使用 .find_all()
选择每个并执行相同操作。
from bs4 import BeautifulSoup
s = """
<tr class="a-spacing-small">
<td class="a-span3">
<span class="a-size-base a-text-bold">Flavour</span>
</td>
<td class="a-span9">
<span class="a-size-base">Green Apple</span>
</td>
</tr>
"""
soup = BeautifulSoup(s, 'lxml')
tr = soup.find('tr')
print(list(tr.stripped_strings))
['Flavour', 'Green Apple']
实际上不需要
.stripped_strings
,正如Ram所提到的,因为您可以直接调用特定的CSS
选择器,这会更安全,因为它会从特定元素而不是其他元素中获取数据,并且这不会创建您想要的字典键值对。
您正在寻找这个:
# ...
data = []
for result in soup.select('tr'):
# CSS selector for flavour detail
flavor_name = result.select_one('.a-span9 .a-size-base').text
# appends to list() as a dict() -> key-value pair
data.append({
"flavour": flavor_name
})
print(data)
# # [{'flavour': 'Green Apple'}]
在线IDE中的代码和示例(将返回键值对):
from bs4 import BeautifulSoup
html = '''
<tr class="a-spacing-small">
<td class="a-span3">
<span class="a-size-base a-text-bold">Flavour</span>
</td>
<td class="a-span9">
<span class="a-size-base">Green Apple</span>
</td>
'''
soup = BeautifulSoup(html, 'html.parser')
# temp list()
data = []
for result in soup.select('tr'):
# flavor = soup.select_one('.a-text-bold').text # returns just Flavour word
flavor_name = result.select_one('.a-span9 .a-size-base').text
data.append({
"flavour": flavor_name
})
print(data)
# [{'flavour': 'Green Apple'}]
访问创建的数据:
for flavour in data:
print(flavour["flavour"])
# Green Apple