Python + BeautifulSoup - 限制特定表上的文本提取(网页上的多个表)

时间:2014-10-13 04:07:05

标签: python beautifulsoup

大家好......我正在尝试使用BeautifulSoup在网页上获取“就业日期:”的内容。该网页包含5个表格。 5个表是相似的,如下所示。

    <table class="table1"><thead><tr><th style="width: 140px;" class="CII">Design Team</th><th class="top"><a href="#top">Top</a></th></tr></thead><tbody><tr><td style="width:20px;">Designer:</td><td>Michael Linnen</td></tr>
            <tr><td style="width:20px;">Date of Employment:</td><td>07 Jan 2012</td></tr>
    <tr><td style="width:20px;">No of Works:</td><td>6</td></tr>
    <tr><td style="width: 15px">No of teams:</td><td vAlign="top">2<br>Combined</td></tr>

<table class="table1"><thead><tr><th style="width: 140px;" class="CII">Operation Team</th><th class="top"><a href="#top">Top</a></th></tr></thead><tbody><tr><td style="width:20px;">Manager:</td><td>Nich Sharmen</td></tr>
            <tr><td style="width:20px;">Date of Employment:</td><td>02 Nov 2005</td></tr>
    <tr><td style="width:20px;">Zones:</td><td>6</td></tr>
    <tr><td style="width: 15px">No of teams:</td><td vAlign="top">2<br>Combined</td></tr>

我想要的文字在第3张表格中,表格标题是&#34;设计团队&#34;

我在下面使用:

page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

aa = soup.find_all(text=re.compile("Date of Employment:"))
bb = aa[2].findNext('td')
print bb.text

问题在于,此表中的“就业日期:”有时不可用。当它不存在时,代码会选择“就业日期”:&#34;在下一张表中。

如何限制我的代码只选择名为“Design Team”的表中的所需代码?感谢。

1 个答案:

答案 0 :(得分:3)

鉴于Date of Employmenttd

,您可以直接找到第5个表格,而不是查找所有th并找到下一个Design Team
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read())

aa = soup.find_all(text="Design Team")

nexttr = aa.next_sibling

if nexttr.td.text == "Date of Employment:":
     print nexttr.td.next_sibling.text 
else:
     print "No Date of Employment:"

nexttr = aa.next_siblingtr代码中找到下一个table代码。

if nexttr.td.text == "Date of Employment:":确保下一个td代码中tr "No Date of Employment:"内的文字为nexttr.td.next_sibling

td提取"Date of Employment"

后面的直接print nexttr.td.next_sibling.text标记

{{1}}打印日期