熊猫read_html给我的权限被拒绝(403)

时间:2019-01-18 14:51:55

标签: python pandas

我注册以通过提供商获得货币价格。当我使用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'])

1 个答案:

答案 0 :(得分:0)

尝试使用: 货币= pd.read_html(r)

代替: 货币= pd.read_html('r')

因为您使用字符串“ r”而不是变量r调用了read_html方法

SLP