【问题标题】:Soup.find_all returning an empty listSoup.find_all 返回一个空列表
【发布时间】:2020-04-16 20:30:44
【问题描述】:

我正在尝试使用 requestsBeautifulSoup 为 NBA 统计数据抓取球员统计数据表,但我得到的响应与我使用“检查元素”看到的不同

包含此表的div 具有类属性:class="nba-stat-table__overflow。但是,每当我运行以下代码时,我都会得到一个空列表:

table = soup.find_all('div',attrs={'class="nba-stat-table__overflow'})

这是我的完整代码:

import os
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import requests

url = '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'})

【问题讨论】:

    标签: html python-3.x web-scraping beautifulsoup


    【解决方案1】:

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

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

    查看我以前的Answer,它为您解释了如何获取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")
    

    输出:View-Online

    【讨论】:

    • 感谢艾哈迈德的解决方案,但您能解释一下为什么我的代码不起作用吗?还有你的代码是如何工作的?你能分享一个链接让我了解更多抓取吗?
    • 请解释一下为什么我得到一个空列表?因为我看过很多关于抓取的视频教程,并且做了完全相同的事情,但是即使我在抓取 rottentomatoes.com 时也得到了一个空列表
    • @ShantanuBisht 答案已更新。如果我的回答对您有帮助,如果您喜欢,请随时 accept and upvote
    • @Ahmed 非常感谢,很抱歉给您带来问题,但您能告诉我如何知道网站是否通过 javascript 加载并使用 API 加载吗?
    • @ShantanuBisht 欢迎您阅读该答案,您将了解check
    猜你喜欢
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多