在另一段文字后解析一段文字(使用python Beautiful Soup)

时间:2015-06-30 14:55:12

标签: python html parsing beautifulsoup

我要解析的HTML是:

> </td> </tr> <!--MRT--> <tr><td colspan="2" style="border-top: 1px
> Dashed #CCC"><h3>MRT Stations Nearby</h3></td></tr><tr><td
> colspan="2"><table width="602" align="center" cellpadding="0"
> cellspacing="0"><tr><td width="261"><a
> href="/property/propertynearmrt/Boon-Lay-MRT/?t=dl&mid=12" title="Boon
> Lay MRT"><strong>Boon Lay MRT</strong></a><br />Distance :0.07km </td>

从这里开始,我想得到距离(在这种情况下为0.07km)。我还使用以下代码解析了站“Boon-Lay-MRT”的名称:

   soup2=BeautifulSoup(webpage2) 
   for cell in soup2.findAll('h3'):
        if 'MRT Stations Nearby' == cell.text:         

            for cell2 in cell.findAllNext('strong')[0]:
                print(cell2)

如何获取下一位文本(距离)?我认为只是将('strong')[0]更改为('br /')应该可以工作,但它不会。

很抱歉,如果问题相当愚蠢,我们将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

根据我的理解,问题的输入是MRT Stations Nearby文本。输出应为0.07km

在这种情况下,想法是找到MRT Stations Nearby文本,找到tr父级。从那里,找到下一个tr兄弟,并查找包含Distance文字的元素:

row = soup.find(text="MRT Stations Nearby").find_parent("tr").find_next_sibling("tr")
distance = row.find(text=lambda x: x and x.startswith("Distance"))

print distance.split(":")[-1].strip()

答案 1 :(得分:0)

你有没有试过for cell2 in cell.findAllNext('br')[0]: ...我认为你不需要&#39; /&#39;因为这只意味着标签是自动关闭的