为了账号安全,请及时绑定邮箱和手机立即绑定

Soup.find_all 返回一个空列表

Soup.find_all 返回一个空列表

动漫人物 2024-01-03 17:35:42
requests我正在尝试使用和来抓取 NBA 统计数据的球员统计表BeautifulSoup,但我得到的响应与我使用“检查元素”看到的不同包含div该表的类属性为:class="nba-stat-table__overflow。但是,每当我运行以下代码时,我都会得到一个空列表:table = soup.find_all('div',attrs={'class="nba-stat-table__overflow'})这是我的完整代码:import osimport pandas as pdimport numpy as npfrom bs4 import BeautifulSoupimport requestsurl = 'https://stats.nba.com/players/boxscores/?Season=2018-19&SeasonType=Regular%20Season'response = requests.get(url)soup = BeautifulSoup(response.content,'html.parser')table = soup.find_all('div',attrs={'class="nba-stat-table__overflow'})
查看完整描述

1 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

基本上页面是通过加载的JavaScript,所以bs4requests模块将无法JavaScript动态渲染。

你应该使用seleniumrequests_html模块来渲染JS,但我注意到网站正在使用API,它可以用来获取数据,所以我调用了它并提取了数据。


import requests

import pandas as pd


params = {

    "Counter": "1000",

    "DateFrom": "",

    "DateTo": "",

    "Direction": "DESC",

    "LeagueID": "00",

    "PlayerOrTeam": "P",

    "Season": "2018-19",

    "SeasonType": "Regular Season",

    "Sorter": "DATE"

}



headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0',

    "x-nba-stats-origin": "stats",

    "x-nba-stats-token": "true",

    "Referer": "https://stats.nba.com/players/boxscores/?Season=2018-19&SeasonType=Regular%20Season"

}



def main(url):

    r = requests.get(url, params=params, headers=headers).json()

    goal = []

    for item in r['resultSets']:

        df = pd.DataFrame(item['rowSet'], columns=item['headers'])

        goal.append(df)


    new = pd.concat(goal)

    print(new)

    new.to_csv("data.csv", index=False)



main("https://stats.nba.com/stats/leaguegamelog")

输出:在线查看

https://img1.sycdn.imooc.com/65952a93000196a125470589.jpg

查看完整回答
反对 回复 2024-01-03
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信