首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从付费墙后面下载Excel文件到熊猫数据仓库中?

如何从付费墙后面下载Excel文件到熊猫数据仓库中?
EN

Stack Overflow用户
提问于 2015-06-21 04:10:27
回答 2查看 3.7K关注 0票数 3

我有这个网站,需要登录访问数据。

代码语言:javascript
复制
import pandas as pd
import requests

r = requests.get(my_url, cookies=my_cookies) # my_cookies are imported from a selenium session.
df = pd.io.excel.read_excel(r.content, sheetname=0)

答复:

代码语言:javascript
复制
IOError: [Errno 2] No such file or directory: 'Ticker\tAction\tName\tShares\tPrice\...

显然,str是作为文件名称处理的。有办法把它作为文件处理吗?或者,我们可以把饼干传递给pd.get_html吗?

编辑:经过进一步的处理,我们现在可以看到这实际上是一个csv文件。下载文件的内容如下:

代码语言:javascript
复制
In [201]: r.content
Out [201]: 'Ticker\tAction\tName\tShares\tPrice\tCommission\tAmount\tTarget Weight\nBRSS\tSELL\tGlobal Brass and Copper Holdings Inc\t400.0\t17.85\t-1.00\t7,140\t0.00\nCOHU\tSELL\tCohu Inc\t700.0\t12.79\t-1.00\t8,953\t0.00\nUNTD\tBUY\tUnited Online Inc\t560.0\t15.15\t-1.00\t-8,484\t0.00\nFLXS\tBUY\tFlexsteel Industries Inc\t210.0\t40.31\t-1.00\t-8,465\t0.00\nUPRO\tCOVER\tProShares UltraPro S&P500\t17.0\t71.02\t-0.00\t-1,207\t0.00\n'

注意,它是由制表符分隔的。尽管如此,仍在努力:

代码语言:javascript
复制
# csv version 1
df = pd.read_csv(r.content) 
# Returns error, file does not exist. Apparently read_csv() is also trying to read it as a file.

# csv version 2
fh = io.BytesIO(r.content)
df = pd.read_csv(fh) # ValueError: No columns to parse from file.

# csv version 3
s = StringIO(r.content)
df = pd.read_csv(s)
# No error, but the resulting df is not parsed properly; \t's show up in the text of the dataframe.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-21 05:13:29

只需将文件内容包装在BytesIO中即可。

代码语言:javascript
复制
with io.BytesIO(r.content) as fh:
    df = pd.io.excel.read_excel(fh, sheetname=0)
票数 4
EN

Stack Overflow用户

发布于 2015-06-21 04:56:26

这个功能从2014年起被包含在一个更新中。根据文档,它只需提供url:

字符串可能是一个URL。有效的URL方案包括http、ftp、s3和file。对于文件URL,需要主机。例如,本地文件可以是file://localhost/path/to/workbook.xlsx。

根据您提供的代码,看起来您使用的是熊猫0.13.x吗?如果您可以升级到较新的版本(下面的代码用0.16.x测试),您可以在不额外使用requests库的情况下使其工作。这是在0.14.1中添加的。

代码语言:javascript
复制
data2 = pd.read_excel(data_url)

作为完整脚本的示例(示例XLS文档取自原虫报告,声明read_excel不接受read_excel):

代码语言:javascript
复制
import pandas as pd
data_url = "http://www.eia.gov/dnav/pet/xls/PET_PRI_ALLMG_A_EPM0_PTC_DPGAL_M.xls"
data = pd.read_excel(data_url, "Data 1", skiprows=2)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30961190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档