【问题标题】:Need help scraping an NHL statistics table with lxml and xpath需要帮助使用 lxml 和 xpath 抓取 NHL 统计表
【发布时间】:2017-01-12 00:21:31
【问题描述】:

我是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

我尝试了很多东西,我原本想尝试使用 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)

【问题讨论】:

  • 该请求中不存在带有class="stat-table"table。该信息是动态的。检查“javascript 渲染”。
  • 是的,当我意识到它是 javascript 时,我知道我需要一种不同的方法。 wu4m4n 的答案完美无缺,但我还将研究“javascript 渲染”以了解更多信息。谢谢!

标签: python python-3.x xpath web-scraping lxml


【解决方案1】:

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

要获取网址,您必须使用谷歌浏览器的网络控制台。

1) 打开控制台,点击“网络”

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

3) 然后你必须按 "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'])

【讨论】:

  • 我究竟如何获得正确的 URL?对不起,我是新手。还有,谢谢
  • 由于某种原因,当我在谷歌浏览器中重新加载页面时,表格不会重新加载。但是,当我使用 Safari 时,它起作用了。再次感谢,这正是我想要的!
  • 我设法让它在谷歌浏览器中也能工作!我在开发工具设置中恢复了默认设置。一定是我过去在不知不觉中改变的东西。
  • 这个页面capfriendly.com/players/shea-weber怎么样?同样的事情似乎不起作用。至少不是所有的桌子。
  • @wu4m4n,您介意解释一下您是如何知道查找/过滤 XHR 的吗?
猜你喜欢
  • 2019-01-31
  • 2019-04-07
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多