Python + BeautifulSoup - 通过搜索条件提取文本

时间:2014-02-25 07:14:53

标签: python beautifulsoup

文件包含如下所示的HTML代码(以下段落中的“注册”和“飞行”字样):

<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年3月2日注册

     

2005年6月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

2 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分: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