2013-07-02 122 views
0

如果我的標籤不斷變化如下:解析更改標籤BeautifulSoup

<tr id="CN13FUT"> 
<tr id="CU13FUT"> 
<tr id="CZ13FUT"> 
<tr id="CH14FUT"> 
[...] 

我如何使用BeautifulSoup閱讀本? 這就是我需要幫助:

table = BeautifulSoup(page) 
for tr in table.findAll('tr', attrs = {'id': 'something_here')) 
    print tr 

我不想只使用table.findAll('tr'),因爲有可能是我不希望其他tr標籤,我只希望,因爲它是怎樣的格式顯示以上。

+0

做所有'tr's(你需要的)有一個id?他們總是以C開頭嗎? – TerryA

回答

0

你可以使用正則表達式來指定要哪個<tr> S:

import bs4 as bs 
import re 

doc = '''<tr id="CN13FUT"> 
    <tr id="CU13FUT"> 
    <tr id="CZ13FUT"> 
    <tr id="CH14FUT"> 
    <tr id="ButNotThis"> 
    ''' 
table = bs.BeautifulSoup(doc) 
for tr in table.findAll(id=re.compile(r'CN13|CU13|CZ13|CH14')): 
    print(tr) 

產量

<tr id="CN13FUT"> 
</tr> 
<tr id="CU13FUT"> 
</tr> 
<tr id="CZ13FUT"> 
</tr> 
<tr id="CH14FUT"> 
</tr> 
+0

但是如果我不知道有多少個標籤' id = ...'是什麼?也許閱讀所有'tr'標籤並解析正確的標籤會更容易。 –

+0

我的解決方案不需要您知道標籤的*號*。它僅僅意味着根據使用正則表達式模式來選擇所需的'tr'標籤來顯示答案的*形式*。你從未說過選擇期望的'tr'標籤的標準,所以我假設你知道如何形成正確的正則表達式模式。如果你不需要說明標準。 – unutbu

0

如果所有的ID屬性在 「FUT」 結尾,然後

for tr in table.findAll(id=re.compile('FUT$')): 
    print(tr) 
    print(tr['id']) # to print the id attributes 

如果所有id屬性長度相同(7),則

for tr in table.findAll('tr', id=lambda x: x and len(x)==7): 
    print(tr['id']) # to print the id attributes