【问题标题】:Importing HTML code into CSV using python使用python将HTML代码导入CSV
【发布时间】:2020-12-27 10:36:19
【问题描述】:

我有一个 HTML,其中包含我想带入 python 并放入 CSV 的数据。我不确定哪个包和程序可以让我完成这项工作,因为我尝试了几个不同的包和程序但没有成功(bs4 和 urllib)。

这是 HTML 链接:

https://www.cmegroup.com/CmeWS/mvc/Volume/Details/F/8478/20200807/F?tradeDate=20200807

出于兴趣,这是什么 HTML 链接?它似乎已经几乎是 CSV 格式了。抱歉,如果这是一个愚蠢的问题。我也尝试在互联网上搜索文件类型。

我在此 Web 链接上尝试了 URL 请求,但在尝试发出请求时收到错误:

from urllib.request import urlopen as uReq

cme_url = "https://www.cmegroup.com/CmeWS/mvc/Volume/Details/F/8478/20200807/F?tradeDate=20200807"

#opening up connection
uClient = uReq(cme_url)

我在 StackOver 上搜索了可以解决我的问题的示例,但没有成功。例如,这个例子没有帮助,因为它已经使用了一个专门的 CSV 文件:Importing CSV into Python

非常感谢您的帮助。

【问题讨论】:

    标签: python html pandas csv


    【解决方案1】:

    您可以通过几个步骤从 URL 读取 json 并将其转换为 csv:

    • 使用 requests 获取 json 文本并将其转换为字典
    • 使用 pandas 将字典转换为 csv 文件

    我假设您只想要月份数据。

    代码如下:

    import requests
    import pandas as pd
    
    url = 'https://www.cmegroup.com/CmeWS/mvc/Volume/Details/F/8478/20200807/F?tradeDate=20200807'
    r = requests.get(url)
    dj = r.json()
            
    df = pd.DataFrame(dj['monthData'])
    df.to_csv('out.csv', index=False)
    

    输出(out.csv)

    month,monthID,globex,openOutcry,totalVolume,blockVolume,efpVol,efrVol,eooVol,efsVol,subVol,pntVol,tasVol,deliveries,opnt,aon,atClose,change,strike,exercises
    AUG 20,AUG-20-Calls,"10,007",0,"10,007",0,0,0,0,0,0,0,0,0,-,-,"9,372","-1,103",0,0
    SEP 20,SEP-20-Calls,"1,316",0,"1,316",0,0,0,0,0,0,0,0,0,-,-,"2,899",47,0,0
    OCT 20,OCT-20-Calls,115,0,115,0,0,0,0,0,0,0,0,0,-,-,614,32,0,0
    NOV 20,NOV-20-Calls,16,0,16,0,0,0,0,0,0,0,0,0,-,-,68,6,0,0
    DEC 20,DEC-20-Calls,13,0,13,0,0,0,0,0,0,0,0,0,-,-,105,-3,0,0
    JAN 21,JAN-21-Calls,6,0,6,0,0,0,0,0,0,0,0,0,-,-,5,4,0,0
    DEC 21,DEC-21-Calls,0,0,0,0,0,0,0,0,0,0,0,0,-,-,1,0,0,0
    

    【讨论】:

      【解决方案2】:

      您提供的网址中的数据格式几乎是JSON

      实际上,您的问题是“如何将 JSON 文件转换为 CSV”。

      Python 本身可以解决这个问题,JSON encoder and decoder

      【讨论】: