私は最近、yahoo NHL ページからスコアを取得するのを手伝ってもらいました。このページでは、チームと前述のスコアがそれぞれの方法で印刷されます。これが私のコードです:
from bs4 import BeautifulSoup
from urllib.request import urlopen
url = urlopen("http://sports.yahoo.com/nhl/scoreboard?d=2013-01-19")
content = url.read()
soup = BeautifulSoup(content)
def yahooscores():
results = {}
for table in soup.find_all('table', class_='scores'):
for row in table.find_all('tr'):
scores = []
name = None
for cell in row.find_all('td', class_='yspscores'):
link = cell.find('a')
if link:
name = link.text
elif cell.text.isdigit():
scores.append(cell.text)
if name is not None:
results[name] = scores
for name, scores in results.items():
print ('%s: %s' % (name, ', '.join(scores)) + '.')
yahooscores()
さて、まず第一に、1 月の毎日のすべての値を取得するには、URL を絶えず変更する必要があるため、このようなものを関数に関連付けています。
ここでの問題は、スコアとチームのテキストをうまく印刷できる一方で、これを達成しようとしていることです。
Ottawa: 1, 1, 2.
Winnipeg: 1, 0, 0.
Pittsburgh: 2, 0, 1
Philadelphia: 0, 1, 0.
ほら、私のコードはそれをしません。私はそれを起こそうとしていましたが、プロセスを複雑にしているのは、テーブルがすべて同じクラスの「スコア」の下にあり、一見、それらの中で何か違うものを見つけることができないということです.
一言で言えば、チームを互いに正しく関連付け、間にスペースを設けて組織化することです。