当前位置:   article > 正文

【Python】通过 requests 获取文件字节流_python的request接收流式数据

python的request接收流式数据

首先需要理解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响应)抛出异常
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

解决问题

        file_name = username + "_test.csv"

        with open(file_name, "wb") as f:
            f.write(res.content)
        df = pd.read_csv(file_name, sep='\t')
  • 1
  • 2
  • 3
  • 4
  • 5

理解之后获取文件流就迎刃而解了,很显然用 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'
  • 1
  • 2

一般流数据就下载到文件中,在对文件进行处理,比如我这边的就是通过pandas读取文件数据,并对数据进行加工和输出。
当然也可以将数据放到内存中,对内存进行读取。
这边是使用的pandas读取csv文件的形式,一般最常见的就是读取文件,不过想一想如果直接将数据存入内存中就不需要磁盘这个中介了,而且存在磁盘在某种情况下设置相同文件存在误读的风险。而根据pandas文档对read_csv的介绍,确实是可以读取内存的。
在这里插入图片描述
这边就用到了io模块的 BytesIO 和 StringIO

# before
        file_name = username + "_test.csv"

        with open(file_name, "wb") as f:
            f.write(res.content)
        df = pd.read_csv(file_name, sep='\t')
 # after
 		res_data = io.BytesIO(res.content)
 		df = pd.read_csv(res_data, sep='\t')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/927245
推荐阅读
相关标签
  

闽ICP备14008679号