使用BeautifulSoup从下一个包含前一个跨度的文本中获取文本

时间:2016-01-13 22:48:33

标签: python-2.7 beautifulsoup

我无法让BeautifulSoup返回我需要的文字 我使用过滤器来获得我需要的<div>但是我无法获得我需要的文本。
鉴于下面的html结构,获得ISCED代码“价值”的最佳方法是什么。 BS对象中还有其他类_ =“inline ...”,因此不可能只找到class_ = inline_value,并且html中可能有超过1个ISCED代码

 <span class="inline_label">
   ISCED:
  </span>
  <span class="inline_value">
   0410: Business &amp; Admin not defined
  </span>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式执行此操作:

In [22]: import re

In [23]: from bs4 import BeautifulSoup

In [24]: soup = BeautifulSoup('''<span class="inline_label">
   ....:    ISCED:
   ....:   </span>
   ....:   <span class="inline_value">
   ....:    0410: Business &amp; Admin not defined
   ....:   </span>''', 'lxml')
   ....:   

In [25]: for el in soup(text=re.compile(r'ISCED')):
   ....:     print(el.parent.find_next_sibling().get_text())
   ....:     

   0410: Business & Admin not defined

In [26]: for el in soup(class_=re.compile(r'inline')):
   ....:     print(el.get_text(strip=True))
   ....:
ISCED:
0410: Business & Admin not defined