2010-01-14 61 views
1

對不起,如果您覺得已經有人問這個問題,但我已經閱讀了相關的問題,並且對Python來說很新,我找不到如何以乾淨的方式編寫此請求。如何使用Python和美味湯有條件地獲取一些數據

現在我有這個最小的Python代碼:

from mechanize import Browser 

from BeautifulSoup import BeautifulSoup 
import re 
import urllib2 



br = Browser() 
br.open("http://www.atpworldtour.com/Rankings/Singles.aspx") 

filename = "rankings.html" 
FILE = open(filename,"w") 

html = br.response().read(); 

soup = BeautifulSoup(html); 
links = soup.findAll('a', href=re.compile("Players")); 
for link in links: 
    print link['href']; 

FILE.writelines(html); 

它檢索出的HREF包含單詞播放器中的所有鏈接。

現在我需要解析HTML看起來是這樣的:

<tr> 
    <td>1</td> 
    <td><a href="/Tennis/Players/Top-Players/Roger-Federer.aspx">Federer,&nbsp;Roger</a>&nbsp;(SUI)</td> 
    <td><a href="/Tennis/Players/Top-Players/Roger-Federer.aspx?t=rb">10,550</a></td> 
    <td>0</td> 
    <td><a href="/Tennis/Players/Top-Players/Roger-Federer.aspx?t=pa&m=s">19</a></td> 
</tr> 

的1包含了玩家的軍銜。 我希望能夠在字典中的檢索此數據:

  • 排名
  • 玩家
  • 鏈接到詳細頁面(在這裏/網球/播放器/頂播放器/ Roger- Federer.aspx)

你能給我一些指點,或者如果這很容易幫助我構建這段代碼?我不確定如何在美麗的湯中制定請求。

安東尼

回答

3

搜索使用方法將工作的球員,但將返回每名球員3個結果。便於搜索表本身,然後通過行迭代(除了頭):

table=soup.find('table', 'bioTableAlt') 
for row in table.findAll('tr')[1:]: 
    cells = row.findAll('td') 
    #retreieve data from cells... 

要得到你需要的數據:

rank = cells[0].string 
    player = cells[1].a.string 
    link = cells[1].a['href'] 
+0

謝謝您的回覆,我想驗證,但我現在在工作,我今晚會在家裏嘗試這個,並驗證你的答案! – BlueTrin 2010-01-15 08:52:20

相關問題