2013-08-18 5 views
0

Я хочу, чтобы вы посмотрите на этом сайте:Ассоциирование несколько команд с несколькими заголовками/значениями:

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) 

Assuringly, этот материал является более сложным. Я смог, с большой помощью и переучиванием некоторых забытых классов Python, смог сделать это объединение команд и партитуры на этом сайте: http://sports.yahoo.com/nhl/scoreboard?d=2013-04-01

Однако на первой странице (первой) есть несколько заголовков, связанных с их значения.

То, что я просто прошу, является сущностью некоторых из них, так что я могу выполнить остальные без проблем (или, может быть, несколько, кто знает). В каком-то смысле это то, чего я хочу достичь:

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

Спасибо!

ответ

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() 
+0

Хороший ответ. Из любопытства, что делает молния? Кроме того, [1:]. Остальное ясно. @falsetru –

+0

@NathanielElder, 'xs [1:]' возвращает копию 'xs' без первого элемента. – falsetru

+0

@NathanielElder, 'zip (a, b)' объединить все элементы 'a' и' b'. Например, 'zip ([1, 2, 3], [4, 5, 6])' дает '[(1,4), (2, 5), (3, 6)]'. На Python 3.x выдает итератор вместо списка. – falsetru