Python(六) —— 网络请求
接口调用
接口调用有几个模块可以用:urllib 和 requests ,urllib 是内置的模块,极其不好用,强烈推荐用 requests 模块
get 请求
1、普通的 get 请求
import requests
url = 'http://api.nnzhp.cn/api/user/stu_info'
res = requests.get(url)
2、下载文件
比如说下载一个 qq 号对应的头像:url 为:http://q4.qlogo.cn/g?b=qq&nk=2422156774&s=140
要下载的话,要以二进制形式下载,存也是以二进制方式去存
url = 'http://q4.qlogo.cn/g?b=qq&nk=2422156774&s=140'
req = requests.get(url)
with open('头像.jpg','wb') as fw:
fw.write(req.content) #content 返回的是二进制类型
post 请求
1、form 形式:
url = 'http://api.nnzhp.cn/api/user/login'
data = {
'username':'niuhanyang',
'passwd':'aA123456'
}
requests.post(url,data)
2、发送 json 形式
url = 'http://api.nnzhp.cn/api/user/add_stu'
data = {
"name":"甘子文666",
"grade":"天蝎座",
"phone":18612532946,
"sex":"男",
"age":28,
"addr":"河南省济源市北海大道32号"
} res = requests.post(url,json=data)
print(res.text)
3、添加 header / cookie
注意,传 cookie 和 header 要指定一下,因为除 url,data,json 为位置参数外,其他的参数均为:**kwargs
方式1:只添加 cookie,coookie 内以字典方式存进去
url2 = 'http://api.nnzhp.cn/api/user/gold_add'
data = {
'stu_id':2,
'gold':10086
}
cookie = {
'niuhanyang':'1e7eb92afb46a529f8b30605ed0b6c09'
}
res = requests.post(url2,data,cookies = cookie)
print(res.text)
方式2:直接把 cookie 放进 header 传进去(推荐用此方法,在 cookie 贼啦长的时候,就知道为啥要用这个了 )
url2 = 'http://api.nnzhp.cn/api/user/gold_add'
data = {
'stu_id':2,
'gold':10086
}
header = {'cookie':'niuhanyang=1e7eb92afb46a529f8b30605ed0b6c09'}
res = requests.post(url2,data,headers = header)
print(res.text)
4、上传文件
注意上传要先将文件以二进制形式打开,再上传
url = 'http://api.nnzhp.cn/api/file/file_upload'
data = {'file':open('a.py','rb')} #rb 的意思是将文件以二进制形式打开
res = requests.post(url,files = data)
print(res.text)
Response
响应头
import requests
url = 'www.xxx.xxx'
r = requests.get(url) print(r.headers) #获得响应头信息,返回的是一个字典形式
print(r.headers['Content-Type'])
print(r.headers.get('Content-Length'))
响应状态码
import requests
url = 'www.xxx.xxx'
r = requests.get(url)
print(r.status_code) #响应状态码,返回一个 int 类型数字,参加状态码 print(r.status_code==requests.codes.ok) #内置状态码查询对象
r.raise_for_status() #通过 Response.raise_for_status() 来抛出异常
响应的 cookie
返回的是一个 dict 类型
import requests
url = 'www.xxx.xx'
r = requests.get(url) print(r.cookies) print(r.cookies['bid'])
响应信息
import requests
url = 'http://api.nnzhp.cn/api/user/stu_info'
d = {'stu_name':'矿泉水2'}
res = requests.get(url,d).json() #返回一个字典
res = requests.get(url,d).text #返回一个字符串,假设数据类型为 json 类型,那么这个返回的就是格式化好的 json 串 print(res)
.content 和 .text 的用法区别
requests对象的get和post方法都会返回一个Response对象,这个对象里面存的是服务器返回的所有信息,包括响应头,响应状态码等。其中返回的网页部分会存在.content和.text两个对象中。
.content中间存的是字节码 .text存的是.content编码后的字符串
一般来说 .text直接用比较方便 返回的是字符串 但是有时候会解析不正常导致
返回的是一堆乱码这时用.content.decode('utf-8')就可以使其显示正常。
总的来说.text是现成的字符串,.content还要编码,但是.text不是所有时候显示都正常,这是就需要用.content进行手动编码。
对requests获取的原始数据,有两种获取形式,一个是r.content一个是r.text。
二者的区别在于content返回的是byte型数据,而text返回的是Unicode数据,也就是说text对原始数据进行的特殊的编码,而这个编码方式是基于对原始数据的猜测(响应头),
text一般用于返回的文本
content的一般用于对返回的其他数据类型
但是对于某些网站的中文用text可能会导致返回乱码,所以最好是使用content然后自己进行重新编码。
最终结论是:
text 返回的是unicode 型的数据,一般是在网页的header中定义的编码形式。
content返回的是bytes,二级制型的数据。
也就是说你如果想要提取文本就用text,但是如果你想要提取图片、文件,就要用到content
Python(六) —— 网络请求的更多相关文章
- python爬虫 - python requests网络请求简洁之道
http://blog.csdn.net/pipisorry/article/details/48086195 requests简介 requests是一个很实用的Python HTTP客户端库,编写 ...
- python爬虫#网络请求requests库
中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urlli ...
- python发送网络请求
1.使用urllib模块(使用不方便,建议使用第二种) get请求: res = urlopen(url) from urllib.request import urlopen url = 'http ...
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- Python 网络请求模块 urllib 、requests
Python 给人的印象是抓取网页非常方便,提供这种生产力的,主要依靠的就是 urllib.requests这两个模块. urlib 介绍 urllib.request 提供了一个 urlopen 函 ...
- python 网络请求类库 requests 使用
python 网络请求类库 requests 使用 requests是 为python封装的强大 REST 操作类库 githubhttps://github.com/kennethreitz/req ...
- Python网络请求urllib和urllib3详解
Python网络请求urllib和urllib3详解 urllib是Python中请求url连接的官方标准库,在Python2中主要为urllib和urllib2,在Python3中整合成了urlli ...
- 「Python 编程」编码实现网络请求库中的 URL 解析器
摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...
- python学习笔记:网络请求——urllib模块
python操作网络,也就是打开一个网站,或者请求一个http接口,可以使用urllib模块.urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模 ...
- python 学习笔记之手把手讲解如何使用原生的 urllib 发送网络请求
urllib.urlopen(url[,data[,proxies]]) : https://docs.python.org/2/library/urllib.html python 中默认自带的网络 ...
随机推荐
- 使用Pillow(PIL)库实现中文字符画
上班摸鱼写的,不多说了,直接上脚本 #coding=utf-8 from PIL import Image from PIL import ImageDraw from PIL import Imag ...
- mybatis 批量将list数据插入到数据库
随着业务需要,有时我们需要将数据批量添加到数据库,mybatis提供了将list集合循环添加到数据库的方法.具体实现代码如下: 1.mapper层中创建 insertForeach(List < ...
- visible,invisible和GONE的区别
在Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为“visible ”.“invisible”.“gone”.主要用来设置控制控件的显示和隐藏.有些人可能会疑惑In ...
- ftp服务器不能上传文件故障
1.在客户端lftp命令无法put文件 原因:登陆用户无法读写 ftp服务器的文件夹,在服务器上增加权限 chmod 777 即可 还有一种方法:在 vsftp的配置文件里,设置可匿名读写
- Android编译异常` Cause: duplicate entry: META-INF/MANIFEST.MF`
目录 Android编译异常Cause: duplicate entry: META-INF/MANIFEST.MF 解决方案2: 治标又治本(暂无) 解决方案1: 治标不治本(还原大法) 参考资料 ...
- 用R语言求置信区间
用R语言求置信区间 用R语言求置信区间是很方便的,而且很灵活,至少我觉得比spss好多了. 如果你要求的只是95%的置信度的话,那么用一个很简单的命令就可以实现了 首先,输入da=c(你的数据,用英文 ...
- Linux命令集锦:ansible命令
ansible 命令主要用于批量管理,来实现自动化管理.常用批量操作包括:主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 一.安装 ansible yum instal ...
- 安装mysql报Requires: libc.so.6(GLIBC_2.17)(64bit)
Error: Package: mysql-community-server-5.6.40-2.el7.x86_64 (mysql56-community) Requires: libc.so.6(G ...
- SLC cache功能
由于TLC需要多次编程,且未全部编程时wordLine处于不稳定状态,所以一般都会划出一部分区域作为SLC cache使用 SLC cache主要功能是,SSD接收到写命令后,先将数据写入SLC ca ...
- Summary of OAuth 2.0
Summary of OAuth 2.0 1 Problems: This pattern of applications obtaining user passwords obviously has ...