2020-07-14--requests入门01

2020-07-13  本文已影响0人  program_white

request和requests库的区别

request:在之前学习web时,需要获取客户端传来的一些数据时,可以通过request对象进行获取,例如method,form等,这些数据都封装在request对象中。
requests:用于在客户端浏览器对服务器进行访问时使用的库,服务器的回应可以通过requests进拿到。

request的优势

功能特性

Requests 完全满足今日 web 的需求:

request的使用

在使用之前请安装Anaconda,并创建python项目,选择Anaconda中的python解释器。
1.requests

pip install requests 

2.使用requests

响应 = requests.方法(请求地址)

response = requests.method(url)

3.requests.get(url) = response的返回值

response.text    #获取服务器响应的str类型的响应
response.content  #获取字节bytes类型的响应
response.status_code    #获取响应的状态码
response.headers  #获取响应头
response.request  #获取响应对应的请求

request的GET方式

get请求方式:

  1. 访问baidu:
import requests

resp = requests.get('https://www.baidu.com')

print(resp)           #<Response [200]>
  1. 以get方式带参数访问测试网站时:
1.直接在url后加上参数即可
import requests
resp1 = requests.get("http://httpbin.org/get?name=lizhao&age=20")
print(resp1.text)

2.单独传递参数,get方法的参数有url和params两个,将两部分分开写
params = {
    'name':'lizhao',
    'age':'20'
}
resp2 = requests.get("http://httpbin.org/get",params=params)
print(resp2.text)

两部分的响应一摸一样:

  1. 但是上边的响应其实是json格式的字符串,那么如果要取出里边的数据怎么办?

调用resp.json()直接将json字符串转为dict类型

#json()直接转为dict类型
print(resp1.json())       #{'args': {'age': '20', 'name': 'lizhao'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.24.0', 'X-Amzn-Trace-Id': 'Root=1-5f0dc7a5-cf30d50fea502634727b91f1'}, 'origin': '111.18.58.96', 'url': 'http://httpbin.org/get?name=lizhao&age=20'}

print(type(resp1.json()))           #<class 'dict'>
  1. 修改编码方式
  1. 修改baidu响应的编码方式
import requests

#访问baidu
resp = requests.get('https://www.baidu.com')


print(resp.text)

print(resp.encoding)         #ISO-8859-1
#修改编码方式
resp.encoding = 'utf-8'

print(resp.text)

print(resp.encoding)         #utf-8

响应结果:

  1. 获取字节格式的响应
print(resp.content)         #获取字节的响应
print(resp.content.decode())       #直接转为utf-8 

响应结果:

  1. 获取响应头
print(resp.headers)

获取GitHub的ico头像

import requests

resp = requests.get('https://github.com/favicon.ico')

print(resp.content)

#二进制方式写入文件
with open('github.ico','wb') as f:
    f.write(resp.content)
print('完成')

运行结果:

requests的POST请求

在之前的例子中都是以get请求进行访问的,那么post是怎样请求的呢?

post请求函数:

传递的参数是dat还是json由服务器决定。

post请求:

import requests

#设置请求头
header={
"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16",
}
#请求数据
data = {
'name' : 'lizhao',
'age' : 22
}
#发送请求
req = requests.post('https://httpbin.org/post',data=data,headers=header)
print(req.text)
print(req.status_code)      #200
print(req.json())    

在请求的headers中加入用户代理User-Agent。

结果:

案例访问金山词霸,获取翻译结果

需求 1、构造url 2、请求头 3、构造请求体 4、发送请求,输出数据 如下如是浏览

响应:

代码:

import requests

xurl = 'http://fy.iciba.com/ajax.php?a=fy'

xform = {
    'f':'auto',      #翻译前语言类型
    't':'auto',      #想要翻译的类型
    'w':'你好'        #翻译内容
    }

xhead = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}

#发送请求
resp = requests.post(url=xurl,data=xform,headers=xhead)

#接收数据dict类型
json_data = resp.json()

print(json_data)
print(json_data['content']['out'])       #取出翻译结果

结果:

上一篇 下一篇

猜你喜欢

热点阅读