将多个团队与多个标头/值相关联:

时间:2013-08-18 03:46:32

标签: python html python-3.x beautifulsoup

我希望你看看这个网站:

http://www.nhl.com/ice/teamstats.htm

现在,我的代码在这里。这只会打印出表格顶部的所有标题:

from bs4 import BeautifulSoup
from urllib.request import urlopen

url = urlopen("http://www.nhl.com/ice/teamstats.htm")

content = url.read()

soup = BeautifulSoup(content)

results = {}

for table in soup.find_all('table', class_='data stats'):
    for row in table.find_all('tr'):
        name = None
        for cell in row.find_all('th'):
            link = cell.find('a')
            if link:
                name = cell.a.string
                print (name)

确实,这些东西更复杂。我能够通过大量帮助和重新学习一些被遗忘的Python课程,能够在这个网站上进行团队和分数的关联:http://sports.yahoo.com/nhl/scoreboard?d=2013-04-01

但是,以前的网页(第一个)有多个与其值相关联的标题。

我刚才问的是它的一些要点,以便我可以进一步完成其余的没有问题(或者可能是少数,谁知道)。从某种意义上说,这就是我希望实现的目标:

Team X: GP: 30. W: 16. L: 4, etc.

谢谢!

1 个答案:

答案 0 :(得分:1)

您的代码只处理th。还应处理td

请尝试以下操作:

from bs4 import BeautifulSoup
from urllib.request import urlopen

u = urlopen("http://www.nhl.com/ice/teamstats.htm")
soup = BeautifulSoup(u)
u.close()

for table in soup.find_all('table', class_='data stats'):
    row = table.find('tr')
    header = []
    for cell in row.find_all('th')[1:]:
        name = cell.string.strip()
        header.append(name)
    for row in table.find_all('tr')[1:]:
        for name, cell in zip(header, row.find_all('td')[1:]):
            value = cell.string.strip()
            print('{}: {}'.format(name, value), end=', ')
        print()