【问题标题】:Unable to Write Table to Pandas DataFrame无法将表写入 Pandas DataFrame
【发布时间】:2019-07-06 10:40:30
【问题描述】:

我正在尝试抓取一个网页,该网页具有一个嵌入在 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)

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

Traceback(最近一次调用最后一次): 文件“”,第 2 行,在 AttributeError:“元素”对象没有属性“find_all”

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

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

【问题讨论】:

    标签: python html pandas beautifulsoup python-requests


    【解决方案1】:

    我想提两点。

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

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

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2017-01-29
      • 2017-12-22
      • 2013-05-31
      • 2020-06-12
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多