【Python】通过 requests 获取文件字节流
首先需要理解requests 模块
requests 模块
模块说明
requests是使用Apache2 licensed 许可证的HTTP库。
用python编写。
比urllib2模块更简洁。
Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。
在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。
现代,国际化,友好。
requests会自动实现持久连接keep-alive
响应内容
r.encoding #获取当前的编码
r.encoding = 'utf-8' #设置编码
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功#*特殊方法*#
r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status() #失败请求(非200响应)抛出异常
解决问题
file_name = username + "_test.csv"with open(file_name, "wb") as f:f.write(res.content)df = pd.read_csv(file_name, sep='\t')
理解之后获取文件流就迎刃而解了,很显然用 r.content 就这个方法就OK了,可以手动调试一下,比如我这边的获取的就是 csv 文件形式的数据,所有数据以\n分行,并通过\t分隔开。
[in]:res.content
[out]:b'Date\tCampaign Id\tOffer Id\tLocation\tImpression\tClick\tConversion\tEcpm\tCpc\tCtr\tCvr\tIvr\tSpend\n20211030\t8907\t37934\tUS\t0\t63\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t14052\t52045\tVN\t0\t32\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t14052\t52616\t**\t0\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t14052\t54484\tID\t0\t20\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t9856\t44259\tUS\t0\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t14052\t57610\tID\t44\t494\t0\t0.00000\t0.00000\t11.22727\t0.00000\t0.00000\t0.00000\n20211030\t14052\t62767\tUS\t523973\t28932\t1642\t1.88025\t0.03405\t0.05522\t0.05675\t0.00313\t985.20000\n20211030\t14052\t52062\tVN\t4\t45\t0\t0.00000\t0.00000\t11.25000\t0.00000\t0.00000\t0.00000\n20211030\t14052\t62767\tMM\t4\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\t0.00000\n20211030\t14052\t52616\tID\t792563\t29384\t2337\t0.15534\t0.00419\t0.03707\t0.07953\t0.00295\t123.11500\n20211030\t9856\t40895\tUS\t0\t17\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t11745\t46226\tID\t0\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t8907\t45078\tUS\t0\t20\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211030\t14052\t53382\tID\t1\t50\t0\t0.00000\t0.00000\t50.00000\t0.00000\t0.00000\t0.00000\n20211031\t14052\t62767\tUK\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\t0.00000\n20211031\t14052\t52616\tSG\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\t0.00000\n20211031\t8907\t37934\tUS\t0\t60\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t8907\t39150\tUS\t0\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t14052\t52045\tVN\t0\t29\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t9856\t42378\tBR\t0\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t14052\t52616\tUS\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\t0.00000\n20211031\t8907\t38997\tUS\t0\t3\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t14052\t57610\tID\t43\t437\t0\t0.00000\t0.00000\t10.16279\t0.00000\t0.00000\t0.00000\n20211031\t9856\t40895\tUS\t0\t13\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t14052\t53382\tID\t1\t33\t0\t0.00000\t0.00000\t33.00000\t0.00000\t0.00000\t0.00000\n20211031\t14052\t62767\tMM\t2\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\t0.00000\n20211031\t8907\t45078\tUS\t0\t26\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t9856\t44259\tUS\t0\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\n20211031\t14052\t62767\tUS\t594255\t35266\t1697\t1.71341\t0.02887\t0.05934\t0.04812\t0.00286\t1018.20000\n20211031\t14052\t62767\tSG\t1\t0\t0\t0.00000\t0\t0.00000\t0\t0.00000\t0.00000\n20211031\t14052\t54484\tID\t1\t15\t0\t0.00000\t0.00000\t15.00000\t0.00000\t0.00000\t0.00000\n20211031\t14052\t52616\tID\t740982\t34884\t3040\t0.22202\t0.00472\t0.04708\t0.08715\t0.00410\t164.51500\n20211031\t14052\t52062\tVN\t4\t46\t0\t0.00000\t0.00000\t11.50000\t0.00000\t0.00000\t0.00000\n'
一般流数据就下载到文件中,在对文件进行处理,比如我这边的就是通过pandas读取文件数据,并对数据进行加工和输出。
当然也可以将数据放到内存中,对内存进行读取。
这边是使用的pandas读取csv文件的形式,一般最常见的就是读取文件,不过想一想如果直接将数据存入内存中就不需要磁盘这个中介了,而且存在磁盘在某种情况下设置相同文件存在误读的风险。而根据pandas文档对read_csv的介绍,确实是可以读取内存的。
这边就用到了io模块的 BytesIO 和 StringIO
# beforefile_name = username + "_test.csv"with open(file_name, "wb") as f:f.write(res.content)df = pd.read_csv(file_name, sep='\t')# afterres_data = io.BytesIO(res.content)df = pd.read_csv(res_data, sep='\t')
【Python】通过 requests 获取文件字节流相关推荐
- Python利用Requests获取2TB大容量不限速小麦魔方网盘/小麦云盘(Own-Cloud.Cn)的文件直链并下载文件
我们在浏览网页的时候一般都会看到很多好用的网盘,最近很多网盘都是一些开发者比较喜欢使用的,原因大多都是他们不像某盘一样限速,要求充会员而且还要广告.这些大容量的网盘大多也是开源的,所以我们也不能存储一 ...
- Python学习:获取文件夹中最新的文件/文件夹
文章概述 获取最新修改文件 关于lambda的用法 os.path.getmtime用法 获取最新修改文件 获取文件夹中,最新修改过的文件或者文件夹 import os # 文件夹目录 path=&q ...
- Python 正则处理获取文件后缀
本文档为个人博客文档系统的备份版本.作者:小游.作者博客:点击访问 获取文件后缀:re.search(".([a-z|A-Z]*?)$",s).group(1)
- Python笔记-requests获取web数据及下载文件
使用Python去搞web获取数据相关的东西的确方便.302重定向也能自动解决. 如下FIddler抓包: 这个还是挺好的,可以直接处理302,挂证书也方便: 获取数据源码如下: def getCon ...
- python request下载-Python使用requests下载文件问题
最近在爬一个网站,想直接下载其中的torrent文件,发现该torrent文件在下载页面是点击下载按钮,提交一个form表单到后台,然后开始下载,使用python requests提交表单,但是下载下 ...
- 用python的requests获取B站评论
目录 前言 一.爬取的成果: 二.目标 实现的功能: 三.获取评论的方式 1.点赞投币数: 2.评论 小结: 大概的步骤: 四.操作 1.引入库 2.获得bv号 3.得到点赞投币等信息 4.通过bv得 ...
- python根据文件名获取文件路径_python 查看文件名和文件路径
以下是把sourceDir目录下的以.JPG结尾的文件所有拷贝到targetDir目录下: >>>import os >>> import os.path > ...
- python调用接口获取文件_python接口文件使用说明
首先, python 接口文件在安装好的 darknet 目录下的 python 文件夹,打开就 可以看到 这里的 darknet.py 文件就是 python 接口 用编辑器打开查看最后部分代码: ...
- 用python正确的获取文件最后被修改的时间
一.问题描述: 时间的hour是不对的,其他都是正确的 二.根因定位: 因为utcfromtimestamp是获取utc的时间 UTC即世界标准时间,中国大陆.中国香港.中国澳门.中国台湾.蒙古国.新 ...
最新文章
- 编程求文件file1中数据的平均值,并将其与平均值最接近的数删除
- 喧喧发布 2.5.2 版本,主要修复已知问题
- 如何定义一个不能被继承的类
- kernel 3.10代码分析--KVM相关--虚拟机创建\VCPU创建\虚拟机运行
- 一次性上传多个文件到服务器端(一)
- 谷歌Pixel 4真机曝光:宽大额头内含诸多玄机
- bootstrap mysql分页_bootstrap实现分页
- 利用java poi对excel表的读写操作
- mysql config type_mysql_config_editor用法举例
- 在MFC中获取窗口\视图句柄 &获取当前活动的CView .
- 【国科大】计算机类课程点评(更新中)
- 算法导论(原书第3版) 目录
- 资深Java面试题及答案(汇总)
- WinRAR密码破解(精)
- 语音合成 g2p 字典设计
- 正则限定开头和取反 (否)
- Composer的基本使用
- 学画画软件app推荐_可以学画画的APP有哪些?
- 《架构师修炼之道》读书笔记之五:换位思考
- 5G网络架构与组网部署