我正在尝试抓取整体产品细节,例如品牌、成分和口味

问题描述 投票:0回答:3

任何人都可以帮助我使用 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 web-scraping beautifulsoup
3个回答
0
投票

我将数据作为

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

0
投票

你可以这样做。

选择

<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']

0
投票

实际上不需要

.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
© www.soinside.com 2019 - 2024. All rights reserved.