Soup.find_all возвращает пустой список - PullRequest
1 голос
/ 16 апреля 2020

Я пытаюсь очистить таблицу статистики игрока для статистики NBA, используя requests и BeautifulSoup, но ответ, который я получаю, не совпадает с тем, что я вижу, используя "Inspect Element"

The 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'})

1 Ответ

0 голосов
/ 16 апреля 2020

В основном страница загружается через JavaScript, поэтому bs4 или requests модули не смогут визуализировать JavaScript на лету.

Вы должны использовать selenium или requests_html модулей для рендеринга JS, но я заметил, что веб-сайт использует API, который можно использовать для извлечения данных, поэтому я вызвал его и извлек данные.

Check My предыдущий Ответ , который объясняет вам, как получить 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")

Вывод: Просмотр онлайн

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...