Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要帮助用lxml和xpath创建NHL统计表吗_Python_Python 3.x_Xpath_Web Scraping_Lxml - Fatal编程技术网

Python 需要帮助用lxml和xpath创建NHL统计表吗

Python 需要帮助用lxml和xpath创建NHL统计表吗,python,python-3.x,xpath,web-scraping,lxml,Python,Python 3.x,Xpath,Web Scraping,Lxml,我是python新手(使用python3.6),我学习python主要是为了能够为这个页面构建一个scraper 我已经尝试了很多东西,最初我想尝试使用xpath,但失败后,我决定尝试使用BeautifulSoup4,我得到了这个错误 for row in soup('table', {'class': 'stat-table'})[0].tbody('tr'): IndexError: list index out of range 从这个代码 import urllib.requ

我是python新手(使用python3.6),我学习python主要是为了能够为这个页面构建一个scraper

我已经尝试了很多东西,最初我想尝试使用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)

要使其工作,您必须找到向内部API发出请求的正确url

要获取url,您必须使用google chrome的web控制台

1) 打开控制台并单击“网络”

2) 然后刷新网站,您将看到来自此页面的所有请求

3) 然后你必须通过“XHR”进行过滤,然后你就可以了


要使其工作,您必须找到向内部API发出请求的正确url

要获取url,您必须使用google chrome的web控制台

1) 打开控制台并单击“网络”

2) 然后刷新网站,您将看到来自此页面的所有请求

3) 然后你必须通过“XHR”进行过滤,然后你就可以了


该请求中不存在带有
class=“stat table”
表。这些信息是动态的。检查“javascript呈现”。是的,当我意识到它是javascript时,我知道我需要一种不同的方法。wu4m4n的答案非常有效,但我还将研究“javascript呈现”以了解更多信息。谢谢该请求中不存在带有
class=“stat table”
表。这些信息是动态的。检查“javascript呈现”。是的,当我意识到它是javascript时,我知道我需要一种不同的方法。wu4m4n的答案非常有效,但我还将研究“javascript呈现”以了解更多信息。谢谢我怎样才能得到正确的URL?对不起,我是新来的。另外,出于某种原因,谢谢你,当我在谷歌浏览器中重新加载页面时,表不会重新加载。但是,当我使用Safari时,它起作用了。再次感谢,这正是我想要的!我设法让它在谷歌chrome上也能正常工作!我在dev工具设置中恢复了默认值。一定是我过去不知道就改变了什么。这一页怎么样?同样的事情似乎不起作用。至少不是所有的表都是如此。@wu4m4n,您是否介意解释一下您是如何知道如何查找/筛选XHR的?以及如何准确地获取正确的URL?对不起,我是新来的。另外,出于某种原因,谢谢你,当我在谷歌浏览器中重新加载页面时,表不会重新加载。但是,当我使用Safari时,它起作用了。再次感谢,这正是我想要的!我设法让它在谷歌chrome上也能正常工作!我在dev工具设置中恢复了默认值。一定是我过去不知道就改变了什么。这一页怎么样?同样的事情似乎不起作用。至少不是所有的表都是如此。@wu4m4n,您能解释一下您是如何知道如何查找/筛选XHR的吗?
#!/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'])