Как получить некоторые данные условно с помощью Python и Beautiful Soup - PullRequest
1 голос
/ 15 января 2010

Извините, если вы чувствуете, что это было задано, но я прочитал соответствующие вопросы и, будучи совершенно новым для 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 содержит слово player.

Теперь 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 содержит ранг игрока. Я хотел бы иметь возможность получить эти данные в словаре:

  • Оценка
  • имя игрока
  • ссылка на подробную страницу (здесь /Tennis/Players/Top-Players/Roger-Federer.aspx)

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

Anthony

1 Ответ

3 голосов
/ 15 января 2010

Поиск игроков с использованием вашего метода будет работать, но вернет 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...