find_next()无法找到某些内容

时间:2018-03-12 23:12:35

标签: python html beautifulsoup

所以这是一个关于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">&nbsp;</td>
        <td align="right">000124 </td>
    </tr>
    <tr>
        <td>REF. NO.</td>
        <td align="center">&nbsp;</td>
        <td align="right"> </td>
    </tr>
    <tr>
        <td>MANU</td>
        <td align="center">&nbsp;</td>
        <td align="right"></td>
    </tr>
        <tr>
            <td>STREAK</td>
            <td align="center">&nbsp;</td>
            <td align="right">1075</td>
        </tr>
    <tr> 
        <td>PACK</td>
        <td align="center">&nbsp;</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}

我需要你的帮助,为什么这对某些词来说是有用的,而有些则不是。任何帮助表示赞赏。非常感谢你!

1 个答案:

答案 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()