【问题标题】:trying to scrape products details like brand and flavour using beautifulsoup尝试使用 Beautifulsoup 抓取产品细节,如品牌和风味
【发布时间】:2021-12-28 15:35:48
【问题描述】:

任何人都可以帮助我使用 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>

【问题讨论】:

标签: python html web web-scraping beautifulsoup


【解决方案1】:
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>
    <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>
    '''

soup = BeautifulSoup(html,'html.parser')
first_element = soup.find_all('td', {'class': 'a-span3'})
second_element = soup.find_all('td', {'class': 'a-span9'})

for first_attribute,second_attribute in zip(first_element,second_element):
    print("{} - {}".format(first_attribute.text.strip(),second_attribute.text.strip()))

可以使用 BeautifulSoup 完成,这将为您提供所需的输出,如果您从 URL 读取 HTML,则需要通过将 HTML 替换为获取的内容原始内容来应用一些更改。

【讨论】:

    【解决方案2】:

    你可以这样做。

    • 使用.find_all() 选择表格行&lt;tr&gt;。这将为您提供&lt;tr&gt; 标签列表。
    • 对于每个&lt;tr&gt;,获取其文本并以您需要的方式打印。

    完整代码如下:

    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 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>
    """
    soup = BeautifulSoup(s, 'lxml')
    for tr in soup.find_all('tr'):
        print(' - '.join(list(tr.stripped_strings)))
    

    输出:

    Flavour - Green Apple
    Brand - Carabau
    

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2022-08-14
      • 2022-08-18
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多