我正在网上商店中搜寻详细的产品页面。 每个产品都有一个具有不同索引的图表。 例如,
产品1 品牌:耐克 产国:中国
产品2 品牌:阿迪达斯 价格:$ 150
在这种情况下,产品1的索引为“生产国”,但产品2的索引2为“价格”。 所以很困惑,当我检索此列名称为“生产国家/地区”,但在第2行中则为“ $ 150”。
我想获取所有这些信息,但不知道分别获取“国家”和“价格”。我使用了try-except代码,但都一样,因此即使我找到了“ rel”信息,也无法在td标签“ rel”旁边得到下一个td文本。
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>
答案 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)