2010-01-14 2 views
1

Извините, если вам кажется, что это было задано, но я прочитал связанные вопросы и был совершенно новым для Python. Я не мог найти, как написать этот запрос в чистом виде.Как получить некоторые данные условно с Python и Beautiful Soup

На данный момент у меня есть этот минимальный код 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)

Не могли бы вы дать мне несколько указателей или, если это достаточно легко, помогите мне построить кусок кода? Я не уверен, как сформулировать запрос в Beautiful Soup.

Энтони

ответ

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