簡體   English   中英

使用Python + BeautifulSoup在網頁上的表格中選取文字

[英]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>&nbsp;</TD>
<TD>&nbsp;</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>&nbsp;</TD>
    <TD>&nbsp;</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內部, tbodytable標記是直接的table ,而zp類的table標記又是odd類的tr標記。 然后,我們使用next_siblingspan標簽之后獲取文本。


選項#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>&nbsp;</TD>
    <TD>&nbsp;</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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM