我注册以通过提供商获得货币价格。当我使用pd.read_html('URL')时,出现403错误-权限被拒绝。因此,我然后尝试通过这样做来模仿浏览器-
import pandas as pd
import matplotlib.pyplot as plt
import html5lib
import requests
%matplotlib inline
### Pretend to be a browser ###
url = 'URL_TO_PROVIDER_WITH_TOKEN'
header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36","X-Requested-With": "XMLHttpRequest"}
r = requests.get(url, headers=header)
currency = pd.read_html('r')
但是,这使我“未找到表”。来源看起来像这样-
{"status":true,"currency":[{"currency":"GBP\/CAD","value":"1.7136","date":"2019-01-18 17:19:58","type":"original"}]}
我该怎么办?
如果源文件中没有表,那么如何将数据导入Pandas?如您所见,我要“解析”的数据看起来像这样(json)
{"status":true,"currency":[{"currency":"GBP\/CAD","value":"1.7136","date":"2019-01-18 17:19:58","type":"original"}]}
好吧,显然源不是html,也没有表格。因此,JSON是必经之路。 我设法用
保存JSON结构r = requests.get(url, headers=header).json()
但是后来我被困住了。 r的输出看起来像这样-
{'status': True,
'currency': [{'currency': 'GBP/CAD',
'value': '1.7083',
'date': '2019-01-18 22:59:58',
'type': 'original'}]}
如何获取数据框的列? 我想要'currency':'GBP / CAD','value':'1.7083'and'date':'2019-01-18 22:59:58'
url = 'URL_API_TOKEN'
header = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.75 Safari/537.36","X-Requested-With": "XMLHttpRequest"}
r = requests.get(url, headers=header).json()
data = json_normalize(r['currency'])
答案 0 :(得分:0)
尝试使用: 货币= pd.read_html(r)
代替: 货币= pd.read_html('r')
因为您使用字符串“ r”而不是变量r调用了read_html方法
SLP