Pandas具有非常方便的能力,可以从URL中读取csv和其他格式.但是,当数据受到简单的http身份验证保护时,Pandas无法提示用户输入身份验证详细信息(userid,password).解决此限制的最佳方法是什么?
我目前正在做的是:
response = requests.get('http://my.data.url/metrics/crawler/counts', auth=HTTPBasicAuth('userid', 'password'), stream=True)
pd.read_csv(response.raw)
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
saa*_*aaj 14
由于 Pandas 1.2pandas.read_csv有storage_options参数:
\n\n对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将作为
\nurllib标头选项转发。对于其他 URL(例如以 \xe2\x80\x9cs3://\xe2\x80\x9d 和 \xe2\x80\x9cgcs://\xe2\x80\x9d 开头),键值对将转发到fsspec. 请参阅fsspec和urllib了解更多详情。
storage_options控制 HTTP 标头,因此可以构造 Basic AuthAuthorization标头。
运行受基本身份验证保护的 HTTP 服务器user:pass,提供虚拟 CSV test.csv、.
docker run --rm -it -p 8000:8000 python:2-alpine sh -c \\\n "echo -e \'key,value\\nfoo,1\\nbar,2\' > test.csv \\\n && pip install https://github.com/smarzola/extended_http_server/archive/e2006102.zip \\\n && ext_http_server -a user:pass"\nRun Code Online (Sandbox Code Playgroud)\n用于读取它的 Python 代码pandas.read_csv如下所示。
In [1]: import pandas\n\nIn [2]: try:\n ...: pandas.read_csv(\'http://localhost:8000/test.csv\')\n ...: except Exception as ex:\n ...: print(ex)\nHTTP Error 401: Unauthorized\n\nIn [3]: from base64 import b64encode\n ...: \n ...: pandas.read_csv(\n ...: \'http://localhost:8000/test.csv\',\n ...: storage_options={\'Authorization\': b\'Basic %s\' % b64encode(b\'user:pass\')},\n ...: )\nOut[3]: \n key value\n0 foo 1\n1 bar 2\nRun Code Online (Sandbox Code Playgroud)\n
Jon*_*nah -1
无法测试,但看起来基本访问身份验证可以在 url 中编码。来自维基百科:
URL编码
客户端在访问基本访问身份验证时可以通过在 url 中的主机名前添加 username:password@ 来避免登录提示。例如,以下内容将使用安全 HTTPS 协议访问网站 www.example.com 上的页面 index.html,并通过基本授权提供用户名 Aladdin 和密码 OpenSesame 凭据: https://Aladdin:OpenSesame@www。 example.com/index.html
希望有帮助!
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |