搜寻不同的父标签但子标签相同

时间:2019-05-18 16:21:01

标签: python beautifulsoup

我正在网上商店中搜寻详细的产品页面。 每个产品都有一个具有不同索引的图表。 例如,

产品1 品牌:耐克 产国:中国

产品2 品牌:阿迪达斯 价格:$ 150

在这种情况下,产品1的索引为“生产国”,但产品2的索引2为“价格”。 所以很困惑,当我检索此列名称为“生产国家/地区”,但在第2行中则为“ $ 150”。

我想获取所有这些信息,但不知道分别获取“国家”和“价格”。我使用了try-except代码,但都一样,因此即使我找到了“ rel”信息,也无法在td标签“ rel”旁边得到下一个td文本。

制作“ tr”列表

  B = A.findAll("tr")
  try:
    B.find("td",{"rel":"brand"})
    C = B.find("td",{"class":"last"})
  except:
    C= ""
  return C


 # Product 1
 <tbody>
  <tr>
   <td rel="brand">brand name</td>
   <td class="last">Nike</td>
  <tr>
   <td rel="country">country name</td>
   <td class="last">China</td>

 # Product 2
 <tbody>
   <tr>
     <td rel="brand">brand name</td>
     <td class="last">Adidas</td>
   <tr>
    <td rel="price">price</td>
    <td class="last">$150</td>

1 个答案:

答案 0 :(得分:0)

您可以使用for循环与每个row(每个tr)分开工作,并在td中获得所有row并获得{{1} },每个text中。这样,您就可以单独处理每一行,并且可以将其保留在字典或其他结构中。

td

结果:

data = '''<table>
<tr>
   <td rel="brand">brand name</td>
   <td class="last">Nike</td>
</tr>
<tr>
   <td rel="country">country name</td>
   <td class="last">China</td>
</tr>
</table>

<table>
<tr>
     <td rel="brand">brand name</td>
     <td class="last">Adidas</td>
</tr>
<tr>
    <td rel="price">price</td>
    <td class="last">$150</td>
</tr>
</table>
'''

from bs4 import BeautifulSoup

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

results = []

for table in soup.find_all('table'):
    item = dict()

    for row in table.find_all('tr'):
        tds = row.find_all('td')
        key = tds[0].text
        value = tds[1].text
        item[key] = value

    results.append(item)    

print(results)