python - 无法将表写入 Pandas DataFrame

标签 python html pandas beautifulsoup python-requests

我正在尝试抓取一个网页,该网页包含一个嵌入 HTML 注释中的表格,该注释在执行某些 JavaScript 后加载。我使用 requests_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)

当我运行代码时,迭代后收到以下错误:

回溯(最近一次调用最后一次): 文件“”,第 2 行,位于 AttributeError:“Element”对象没有属性“find_all”

我希望它能将表的文本放入一个空列表中,然后将该列表放入 DataFrame 中。

任何帮助将不胜感激。谢谢!

最佳答案

我想提两点。

a) 您想要的表已存在于 html 中。它只是被注释掉了。如果需要,您可以避免使用 requests-html 而只使用 requests。

b) 您可以使用read_html直接从 a 获取 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)

输出

[   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]]

关于python - 无法将表写入 Pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54655926/

相关文章:

php - Python,如何接收ajax调用数据?

jquery - 无法通过 jQuery 应用条件

c# - 如何在没有 HTML 标签的情况下从数据库中获取数据?

python - 如何使用 Pandas 数据框更新 Postgres 表列?

python - 打开同一个注册表两次?

python:只想在opencv中显示红色 channel

c++ - 如何从 C++ 返回 char ** 并使用 ctypes 将其填充到 Python 列表中?

javascript - 如何使用 jQuery 更改超链接的 href 属性

pandas 从多列分组中获得 1 排名

python - 如何将用户输入转换为独立虚拟变量