Невозможно записать таблицу в Pandas DataFrame - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь очистить веб-страницу с таблицей, встроенной в комментарий HTML, который загружается после выполнения некоторого JavaScript.Я использую request_html и render для выполнения JavaScript и получения полной страницы, включая таблицу (которая фактически является второй таблицей на странице), и это хорошо работает.Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь включить эту таблицу в Pandas DataFrame.

Я попробовал несколько различных вариантов, чтобы попытаться получить данные в формате.После рендеринга веб-страницы я попытался перебрать таблицу, из которой я могу напечатать html таблицы, а также просто текст таблицы, но когда я пытаюсь перебрать таблицу и вставить данные в Pandas DataFrameэто терпит неудачу.

from requests_html import HTMLSession

url = 'https://www.sports-reference.com/cfb/schools/iowa/2018/gamelog/'

session = HTMLSession()

r = session.get(url)

r.html.render()

table = r.html.find('table#defense')

defensive_game_list = []

for d_stats in table:
     d_stats_sum = d_stats.find_all('td')
     d_game_sum = [d_stats.text for d_stats in d_stats_sum]
     defensive_game_list.append(d_game_sum)

df_defense = pd.DataFrame(deffensive_sum_final)

Когда я запускаю код, после итерации я получаю следующую ошибку:

Traceback (последний вызов был последним): файл "", строка 2, в AttributeError: 'Element'У объекта нет атрибута 'find_all'

Я надеюсь, что для этого он поместит текст таблицы в пустой список и затем поместит этот список в DataFrame.

Любая помощь будет принята с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Я хотел бы упомянуть 2 очка.

a) Таблица, которую вы хотите, уже присутствует в html.Это просто закомментировано.Если вы хотите, вы можете избежать использования request-html и просто использовать запросы.

b) Вы можете использовать read_html , чтобы получить DataFrame непосредственно из таблицы html.

Здесь я просто получаю комментарий и преобразую его в DataFrame

import requests
import pandas as pd
from bs4 import BeautifulSoup
from bs4 import Comment
url = 'https://www.sports-reference.com/cfb/schools/iowa/2018/gamelog/'
r = requests.get(url)
soup=BeautifulSoup(r.text,'lxml')
d_table=soup.find('div',id='all_defense').find(string=lambda text:isinstance(text,Comment))
df= pd.read_html(d_table)
print(df)

Output

[   Unnamed: 0_level_0     Passing            Rushing         ...         Unnamed: 23_level_0 Unnamed: 24_level_0 Unnamed: 25_level_0
                   Rk        Date Unnamed: 2_level_1         ...                         Fum                 Int                  TO
0                 1.0  2018-09-01                NaN         ...                           1                   1                   2
1                 2.0  2018-09-08                NaN         ...                           1                   0                   1
2                 3.0  2018-09-15                NaN         ...                           1                   1                   2
3                 4.0  2018-09-22                NaN         ...                           0                   0                   0
4                 5.0  2018-10-06                  @         ...                           0                   4                   4
5                 6.0  2018-10-13                  @         ...                           0                   2                   2
6                 7.0  2018-10-20                NaN         ...                           1                   1                   2
7                 8.0  2018-10-27                  @         ...                           1                   1                   2
8                 9.0  2018-11-03                  @         ...                           0                   2                   2
9                10.0  2018-11-10                NaN         ...                           0                   2                   2
10               11.0  2018-11-17                  @         ...                           1                   3                   4
11               12.0  2018-11-23                NaN         ...                           0                   1                   1
12               13.0  2019-01-01                  N         ...                           1                   2                   3
13                NaN    13 Games                NaN         ...                           7                  20                  27

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