Как очистить данные из последней таблицы на сайте - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь очистить таблицу «Статистика команд за игру» с этого сайта, используя этот код:

from urllib.request import urlopen as uo
from bs4 import BeautifulSoup as BS
import pandas as pd

url = 'https://www.basketball-reference.com/leagues/NBA_2020.html'
html = uo(url)
soup = BS(html, 'html.parser')
soup.findAll('tr')

headers = [th.getText() for th in soup.findAll('tr')]
headers = headers[1:]
print(headers)

rows = soup.findAll('tr')[1:]
team_stats = [[td.getText() for td in rows[i].findAll('td')]
                for i in range(len(rows))]

stats = pd.DataFrame(team_stats, columns=headers)

Но он возвращает эту ошибку:

AssertionError: 71 columns passed, passed data had 212 columns

1 Ответ

1 голос
/ 22 января 2020

Проблема заключается в том, что данные скрыты в закомментированном разделе HTML. Таблица, которую вы хотите извлечь, отображается с Javascript в вашем браузере. Запрос страницы с запросами или urllib просто приводит к необработанному HTML.

. Так что имейте в виду, что вам нужно изучить исходный код страницы с помощью «Просмотр исходного кода страницы», а не визуализированной страницы с «Проверять элемент» "если вы ищете нужные теги для поиска с BeautifulSoup.

Попробуйте:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'https://www.basketball-reference.com/leagues/NBA_2020.html'
html = requests.get(url)

section_start = '<span class="section_anchor" id="team-stats-per_game_link" data-label="Team Per Game Stats">'
block_start = html.text.split(section_start)[1].split("<!--")[1]
block = block_start.split("-->")[0]
soup = BeautifulSoup(block)

data = [th.get_text(",") for th in soup.findAll('tr')]
header = data[0]
header = [x.strip() for x in header.split(",") if x.strip() !=""]
data = [x.split(",") for x in data[1:]]

pd.DataFrame(data, columns=header)

Объяснение: Сначала вам нужно найти закомментированный раздел, просто разделив необработанный HTML просто перед разделом. Вы извлекаете раздел как текст, конвертируете в суп и затем анализируете.

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