2013-07-02 104 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