[英]Using Python + BeautifulSoup to pick up text in a table on webpage
我想在網頁上挑選一個日期。
原始網頁源代碼如下所示:
<TR class=odd>
<TD>
<TABLE class=zp>
<TBODY>
<TR>
<TD><SPAN>Expiry Date</SPAN>2016</TD></TR></TBODY></TABLE></TD>
<TD> </TD>
<TD> </TD></TR>
我想拿起“ 2016”,但失敗了。 我最能做的是:
page = urllib2.urlopen('http://www.thewebpage.com')
soup = BeautifulSoup(page.read())
a = soup.find_all(text=re.compile("Expiry Date"))
我嘗試過:
b = a[0].findNext('').text
print b
和
b = a[0].find_next('td').select('td:nth-of-type(1)')
print b
他們倆都沒有解決。
有什么幫助嗎? 謝謝。
有多種選擇。
選項1(使用CSS選擇器 ,對於元素的路徑非常明確):
from bs4 import BeautifulSoup
data = """
<TR class="odd">
<TD>
<TABLE class="zp">
<TBODY>
<TR>
<TD>
<SPAN>
Expiry Date
</SPAN>
2016
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
<TD> </TD>
<TD> </TD>
</TR>
"""
soup = BeautifulSoup(data)
span = soup.select('tr.odd table.zp > tbody > tr > td > span')[0]
print span.next_sibling.strip() # prints 2016
我們基本上是說:給我一個span
標記,它直接位於td
內部,而td
則直接位於tr
內部, tbody
內部直接是tbody
內部, tbody
的table
標記是直接的table
,而zp
類的table
標記又是odd
類的tr
標記。 然后,我們使用next_sibling
在span
標簽之后獲取文本。
選項#2( 按文本查找span
;認為它更具可讀性)
span = soup.find('span', text=re.compile('Expiry Date'))
print span.next_sibling.strip() # prints 2016
需要re.compile()
,因為文本周圍可能有多行和其他空格。 不要忘記import re
模塊。
CSS選擇器的替代方法是:
import bs4
data = """
<TR class="odd">
<TD>
<TABLE class="zp">
<TBODY>
<TR>
<TD>
<SPAN>
Expiry Date
</SPAN>
2016
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
<TD> </TD>
<TD> </TD>
</TR>
"""
soup = bs4.BeautifulSoup(data)
exp_date = soup.find('table', class_='zp').tbody.tr.td.span.next_sibling
print exp_date # 2016
要了解BeautifulSoup,建議您閱讀文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.