当第一个数据包含所需值时如何获取第二个数据

时间:2018-08-23 19:20:17

标签: python web-scraping beautifulsoup

我正在尝试编写一个for循环来检索一些数据,但我目前陷入困境。当第一个包含“ Primary NAICS Code”时,我需要获取第二个值

 <td class="col_left"><strong>Primary NAICS Code</strong></td>
 <td align="left">                                                        

  311811 : Retail Bakeries                                                    
                                                 </td>

我的for循环显然不起作用

for i, elem in enumerate(all_trs):
    inside_td = elem.find("td")
    if "NAICS" in inside_td.text:
    inside_td = elem.find("td")
    print(inside_td.text)

非常感谢我能提供的任何帮助。预先非常感谢。

2 个答案:

答案 0 :(得分:1)

未经测试,但代替:

for i, elem in enumerate(all_trs):
    inside_td = elem.find("td")
    if "NAICS" in inside_td.text:
        inside_td = elem.find("td")
        print(inside_td.text)

尝试一下:

for i, elem in enumerate(all_trs):
    td_elems = elem.findAll('td')
    if 'NAICS' in td_elems[0].text:
        print(td_elems[1].text)

说明:

findAll方法返回一个td元素的列表,因此,只需获取此序列的句柄,您当然可以对其进行索引:)

  

find_all(自己,名称=无,attrs = {},递归= True,文本=无,限制=无,**扭曲)

     

提取与给定匹配的Tag对象的列表         标准。您可以指定标签的名称以及任何         您希望代码具有的属性。

find方法仅返回第一个td元素,基本上等于:findAll('td')[0]

  

查找(自身,名称=无,attrs = {},递归=真,文本=无,**假)

     

仅返回与此给定标签匹配的第一个孩子       条件。

答案 1 :(得分:0)

这是<td>的下一个兄弟姐妹,其中包含感兴趣的字符串(下一个兄弟姐妹是换行符):

import re
...
soup.body.findAll('td', text=re.compile('Primary NAICS Code'))[0]\
         .next_sibling.next_sibling

#<td align="left">                                                        
#
#  311811 : Retail Bakeries                                                    
#                                                 </td>