使用pd.read_json()提取网页中的json数据?

时间:2019-11-25 04:29:48

标签: python json pandas html-table

尝试从此页面“ https://www.hkex.com.hk/Market-Data/Statistics/Consolidated-Reports/Monthly-Bulletin?sc_lang=en#select1=0&select2=28”中提取表。通过chorme的检查/网络功能,数据请求链接为“ https://www.hkex.com.hk/eng/stat/smstat/mthbull/rpt_turnover_short_selling_current_month_1910.json?_=1574650413485”。直接访问时,此链接看起来像json格式。但是,使用此链接的代码不起作用。

我的代码:

import pandas as pd

url="https://www.hkex.com.hk/eng/stat/smstat/mthbull/rpt_turnover_short_selling_current_month_1910.json?_=1574650413485"

df = pd.read_json(url)
print(df.info(verbose=True))
print(df)

也尝试过:

url="https://www.hkex.com.hk/eng/stat/smstat/mthbull/rpt_turnover_short_selling_current_month_1910.json?"

1 个答案:

答案 0 :(得分:1)

您可以先尝试下载json,然后将其转换回DataFrame

import pandas as pd

url='https://www.hkex.com.hk/eng/stat/smstat/mthbull/rpt_turnover_short_selling_current_month_1910.json?_=1574650413485'

import urllib.request, json 
with urllib.request.urlopen(url) as r:
    data = json.loads(r.read().decode())

df = pd.DataFrame(data['tables'][0]['body'])
columns = [item['text'] for item in data['tables'][0]['header']]
row_count = max(df['row'])
new_df = pd.DataFrame(df.text.values.reshape((row_count,-1)),columns = columns)