Python 需要帮助用lxml和xpath创建NHL统计表吗
我是python新手(使用python3.6),我学习python主要是为了能够为这个页面构建一个scraper 我已经尝试了很多东西,最初我想尝试使用xpath,但失败后,我决定尝试使用BeautifulSoup4,我得到了这个错误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
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'])