所以这是一个关于BS4刮刮的问题,我遇到了一个网站,该网站上几乎没有任何关于应该被抓取信息的ID的网站,所以我很擅长使用find_next
find_next_siblings
或任何其他迭代器类型的BS4模块。
问题是我用它来从我的表中获取一些td值,所以我使用了find_next()
,它确实对某些值有效,但由于某些原因,对于其他值,它无法检测到它。 / p>
这是html:
<table style="max-width: 350px;" border="0">
<tbody><tr>
<td style="max-width: 215px;">REF. NO.</td>
<td style="max-width: 12px;" align="center"> </td>
<td align="right">000124 </td>
</tr>
<tr>
<td>REF. NO.</td>
<td align="center"> </td>
<td align="right"> </td>
</tr>
<tr>
<td>MANU</td>
<td align="center"> </td>
<td align="right"></td>
</tr>
<tr>
<td>STREAK</td>
<td align="center"> </td>
<td align="right">1075</td>
</tr>
<tr>
<td>PACK</td>
<td align="center"> </td>
<td align="right">1</td>
</tr>
<tr>
<td colspan="3">ON STOCK. </td>
</tr>
.... and so on
所以我用这段代码得到了我想要的东西:
div = soup.find('div', {'id': 'infodata'})
table_data = div.find_all('td')
for element in table_data:
if "STREAK" in element.get_text():
price= element.find_next('td').find_next('td').text
print(price+ "price")
else:
print('NOT FOUND!')
我实际上复制并粘贴了HTML中的文本,以确保我没有错误输入任何内容,但仍然总是找不到。但如果我尝试其他表名,我可以得到它们。例如PACK
顺便说一句,我在那里使用了两个find_next()
,因为html在每个td
<tr>
&#39}
我需要你的帮助,为什么这对某些词来说是有用的,而有些则不是。任何帮助表示赞赏。非常感谢你!
答案 0 :(得分:0)
我会像这样重写它:
trs = div.find_all('tr')
for tr in trs:
tds = tr.select('td')
if len(tds) > 1 and 'STREAK' in tds[0].get_text().strip():
price = tds[-1].get_text().strip()