2017-01-12 2 views
2

XPath Я новичок в Python (с использованием python3.6), я учусь это главным образом, чтобы иметь возможность построить скребок для этой страницы http://www.nhl.com/stats/player?aggregate=0&gameType=2&report=skatersummary&pos=S&reportType=season&seasonFrom=20162017&seasonTo=20162017&filter=gamesPlayed,gte,1&sort=points,goals,assistsНужна помощь соскабливания таблицы статистики НХЛ с LXML и

Я попытался много вещей, я изначально хотел попробовать с помощью XPath, но после провала, я решил попробовать с BeautifulSoup4, и я получаю эту ошибку

for row in soup('table', {'class': 'stat-table'})[0].tbody('tr'): 
IndexError: list index out of range 

из этого кода

import urllib.request 
from bs4 import BeautifulSoup 

soup = BeautifulSoup(urllib.request.urlopen('http://www.nhl.com/stats/player?aggregate=0&gameType=2&report=skatersummary&pos=S&reportType=season&seasonFrom=20162017&seasonTo=20162017&filter=gamesPlayed,gte,1&sort=points,goals,assists'),"lxml") 

for row in soup('table', {'class': 'stat-table'})[0].tbody('tr'): 
    tds = row('td') 
    print(tds[0].string, tds[1].string) 
+2

'' table' с классом = "стат-таблица" 'не существует по этому запросу. Эта информация поступает динамически. Проверьте «рендеринг javascript». – eLRuLL

+0

Да, когда я понял, что это javascript, я знал, что мне нужен другой метод. Ответ wu4m4n отлично работает, но я также собираюсь изучить «javascript rendering», чтобы узнать больше. Благодаря! – user3768804

ответ

2

Чтобы сделать это, вам нужно найти правильный URL-адрес, который отправляет запросы во внутренний API.

Чтобы получить URL-адрес, вы должны использовать веб-консоль google chrome.

1) откройте консоль и сделайте щелчок в «Сеть»

enter image description here

2) затем обновить сайт, и вы увидите все запросы с этой страницы.

enter image description here

3), то вы должны фильтровать "XHR", и там вы идете!

enter image description here

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import requests 
import lxml.html 
from pprint import pprint 
from sys import exit 
import json 
import csv 

url = 'http://www.nhl.com/stats/rest/grouped/skaters/basic/season/skatersummary?cayenneExp=seasonId=20162017 and gameTypeId=2&factCayenneExp=gamesPlayed>=1&sort=[{"property":"points","direction":"DESC"},{"property":"goals","direction":"DESC"},{"property":"assists","direction":"DESC"}]' 
resp = requests.get(url).text 
resp = json.loads(resp) 

pprint(resp['data']) 
+0

и как именно я получаю правильный URL? Извините, я новичок в этом. Также, спасибо – user3768804

+0

Я только что обновил ответ! @ user3768804 – wu4m4n

+0

По какой-то причине таблица не перезагружается, когда я перезагружаю страницу в Google Chrome. Но это сработало, когда я использовал Safari. Еще раз спасибо, это именно то, что я искал! – user3768804

Смежные вопросы