2014-02-25 36 views
0

提取文本文件包含类似下面的HTML代码(词“登记”和“飞”是固定在下面的段落):的Python + BeautifulSoup - 通过搜索标准

<TR> 
<TD class=CAT2 width="10%">Registration</TD> 
<TD class=CAT1 width="20%">02 Mar 2006</TD></TR> 

<TR> 
<TD class=CAT2 width="10%">Flying</TD> 
<TD class=CAT1 width="20%">24 Jun 2005</TD></TR> 

我想提取它们,把为:

注册2006年03月02日

飞行2005

月24日

我正在使用BeautifulSoup find_next_sibling,但它不返回任何内容。出了什么问题?

from bs4 import BeautifulSoup 

url = r"C:\example.html" 
page = open(url) 
soup = BeautifulSoup(page.read()) 

aa = soup.find_next_sibling(text='Registration') 

print aa 

回答

1

试试这个

soup.find(text="Registration").findNext('td').contents[0] 
+0

,如果你改变'将工作 “登记:”''以 “注册”' –

+0

感谢洛基和巴拉克马诺斯。 –

0

这行代码:

aa = soup.find_next_sibling(text='Registration') 

因为你期待它会不会在HTML返回一个节点。相反,它返回一个NoneType。你想要做的是,找到与text='Registration'得到它的父母并获得父母的下一个兄弟的元素。

aa = soup.find(text='Registration') 
par = aa.parent 
print par.next_sibling.string 

你也可以达到你的输出为:

soup = BeautifulSoup(page.read()) 

row_1 = soup.find('tr') 
td = row_1.find('td') 
string_1 = td.string + ' ' + td.next_sibling.string #Registration 02 Mar 2006 

row_2 = row_1.next_sibling 
td = row_2.find('td') 
string_2 = td.string + ' ' + td.next_sibling.string #Flying 24 Jun 2005 
+0

我用find找到了find_next_sibling。你有没有在你的代码中做出这样的改变? – shaktimaan

+0

感谢warunsl,它没有给出错误信息,但给出了空白的结果.. –

+0

谢谢你的努力,warunsl。它的信息。但我需要在这里使用搜索条件,例如'注册'等。 –