1

これが尋ねられたと思われる場合は申し訳ありませんが、関連する質問を読みましたが、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 でのリクエストの作成方法がわかりません。

アンソニー

4

1 に答える 1

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']
于 2010-01-14T22:16:45.463 に答える