Python 14:Python网络请求模块

Python网络请求模块


介绍

Python标准库中自带了网络请求模块urllib,这个库比较好用,还有一个第三方网络请求模块requests也非常的人性化设计,值得学习一下。

个人比较喜欢使用requests函数库,因为简单人性化

标准库urllib使用

python2.x
标准库下的网络请求模块比较散乱有两个包urllib和urllib2使用起来并不方便,所以不推荐。

Python3.x
标准库下的网络请求模块梳理的比较好,只有urllib包使用起来还是非常方便的。

网络请求模块还是非常重要的一个模块,因为当今互联网不可能离开网络。

urllib is a package that collects several modules for working with URLs:

urllib.request          for opening and reading URLs
urllib.error            containing the exceptions raised by urllib.request
urllib.parse            for parsing URLs
urllib.robotparser      for parsing robots.txt files

get请求

url="http://www.qq.com"
res=urllib.request.urlopen()

如果有查询参数
url="http://www.qq.com?"
params={"key1":value1,"key2":value2} 
query_data=urllib.parse.urlencode(params) # key2=value2&key1=value1
query_url=url+query_data

res=urllib.request.urlopen(query_url)

备注:这是python3.x的写法,如此看来使用标准库确实不是很人性化啊,太尼玛啰嗦了。

post请求

url="http://www.qq.com"
# 请求头
headers = {'User-Agent':"Mozilla5.5"}
# post请求数据
postdata={"key1":value1,"key2":value2}
data=urllib.parse.urlencode(postdata)
# 封装post请求方法
req=urllib.request.Request(url,data=data,headers)

res=urllib.request.urlopen(req)

关于response的一些操作方法

# 获得响应状态码
status_code=res.getcode()
print("响应状态码:", status_code)
print("-"*80)
# 获得响应内容
text = res.readline()
print("响应内容数据:", text.decode("utf-8"))
print("-"*80)
# 返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息.(服务器响应信息)
info = res.info()
print(info)
print("-" * 80)
# 获得返回请求url
res_url = res.geturl()
print("返回请求url:", res_url)



关于urllib模块的总结就是真心不好用啊。

优秀第三方requests库使用

发送请求

def function():

# 发送get请求获得一个response对象(我们可以从响应对象获得我们想要的一切数据)
res = requests.get("https://api.github.com/events")

# 发送post请求
res = requests.post("http://httpbin.org/post",data={"key":"value", ...})

# 发送put请求
res = requests.put("http://httpbin.org/put",data={"key":"value", ...})

# 发送delete请求
res = requests.delete("http://httpbin.org/delete")

res = requests.head("http://httpbin.org/get")
res = requests.options("http://httpbin.org/get")

pass
//你没看错就是那么简单,非常符合正常人的思维很简便
//再次强调我们能够从response对象中获得我们想要的一切数据信息

构造请求参数发送请求

get请求参数构造

def function():
# 请求参数
payload = {'key1': 'value1', 'key2': 'value2'}

res = requests.get("http://httpbin.org/get",params=payload)# 注意是params参数

# requests 会自动帮我们拼接请求地址
# url= http://httpbin.org/get?key1=value1&key2=value2

//针对get请求使用的即使params参数,post请求使用的是data参数

post form表单请求参数构造

def function():
# form表单要提交的数据
payload = {'key1': 'value1', 'key2': 'value2'}

res = requests.post("http://httpbin.org/post",data=payload)# 注意是data参数

post json对象请求提交参数

def function():
# post 提交json对象数据
payload = {'key1': 'value1', 'key2': 'value2'}

res = requests.post("http://httpbin.org/post",data=json.dumps(payload))# 第一种方式

res = requests.post("http://httpbin.org/post",json=payload)# 第二种方式

构造请求头headers

def function():

# 构造请求头,请求头也是字典格式
headers = {'user-agent': 'my-app/0.0.1'}
url = "https://api.github.com/some/endpoint"

res = requests.get(url,headers=headers)

构造cookies请求

def function():
# 构造cookies
cookies = dict(sessionId='Jsession3123131')
url = "http://httpbin.org/cookies"
requests.get(url,cookies=cookies)
//比如有些应用可能需要携带某些cookie才能验证授权,那么此时就很有用了

构造请求超时设置

def function():
# 设置请求超时时间
requests.get('http://github.com', timeout=0.01) # 0.01秒没响应就请求超时失败

Response响应内容

content = res.content(原始二进制数据)

# 大部分情况使用这个方法
text = res.text(文本数据信息,requests自动帮我们以指定编码解析出来的内容)

# 响应json数据信息,通常我们使用json模块来处理
json_data = res.json()

# 响应状态码
status_code=res.status_code

# 响应头
headers = res.headers

# 响应cookies
cookies = res.cookies

总结:

一句话requests函数库非常的简便 for humans,做网络爬虫时也可以使用该库函数。

总结

网络请求模块是比较重要的一个模块要好好掌握,借组优秀便捷的第三方库函数完成自己的需求我觉得这是高效的。

参考

1、http://docs.python-requests.org/en/latest/user/quickstart/
2、http://docs.python-requests.org/en/latest/user/advanced/#advanced
3、http://docs.python-requests.org/en/latest/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值