【问题标题】:I am Trying to scrape overall product details like brand, ingredient and flavour我正在尝试抓取品牌、成分和风味等整体产品细节
【发布时间】:2021-12-28 08:59:58
【问题描述】:

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


    【解决方案1】:

    我将数据作为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
    

    【讨论】:

    • 感谢 Bhavya,这行得通。但是如果我们有类似的口味和品牌的 td 标签,我们如何获得所有细节
    • 如果要查找所有标签,请使用find_all 方法
    【解决方案2】:

    你可以这样做。

    选择&lt;tr&gt; 并使用.stripped_strings 获取&lt;tr&gt; 中的字符串列表。

    注意:如果您有多个&lt;tr&gt;,则使用.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']
    

    【讨论】:

      【解决方案3】:

      Ram 提到的 .stripped_strings 实际上没有必要,因为您可以直接调用特定的 CSS 选择器,这会更安全,因为它会从特定元素中获取数据,而不是从其他元素中获取数据,而这不会t 根据需要创建字典键值对。

      你正在寻找这个:

      # ...
      
      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'}]
      

      代码和example in the online 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
      

      【讨论】:

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