request库
一、安装
进入cmd进行安装
pip install requests
二、各种请求方式
GET: 请求指定的页面信息,并返回实体主体。
HEAD: 只请求页面的首部。
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE: 请求服务器删除指定的页面。
get 和 post比较常见 GET请求将提交的数据放置在HTTP请求协议头中
POST提交的数据则放在实体数据中
三、GET发送请求与传递参数
通过案例进行分析
import requests
r = requests.get(url='https://www.baidu.com/') #最基本的GET请求
print(r.status_code) #获取返回状态
#带参数的GET请求
r = requests.get(url='https://www.baidu.com/',params={'wd':'python'})
print(r.url)
print(r.text) #打印解码后返回的数据
1、基本的GET请求
import requests
response = requests.get('http://httpbin.org/get')
print(response.text)
返回值:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.23.0",
"X-Amzn-Trace-Id": "Root=1-5ee2e336-3515bbe3b6c7312d01fa9d50"
},
"origin": "61.140.208.227",
"url": "http://httpbin.org/get"
}
2、带参数的GET请求
带参数的GET请求是在查询的时候往URL里面传递数据,传递进入之后会以http://httpbin.org/get?key=val格式存在,requests允许使用params作为参数,以字符串字典的方式传入数据,传入多个数据后面用&号进行连接http://httpbin.org/get?name=germey&age=22(下例)
传入参数name和age
import requests
response = requests.get(url='http://httpbin.org/get',params={'name':'germey','age':'22'})
print(response.text)
或者
import requests
data={
'name':'germey',
'age':'22'
}
response = requests.get(url='http://httpbin.org/get',params=data)
print(response.text)
print(response.url)
URL:
http://httpbin.org/get?name=germey&age=22
text返回值:
{
"args": {
"age": "22",
"name": "germey"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.23.0",
"X-Amzn-Trace-Id": "Root=1-5ee2e43e-8736c0b95c1edef49aff4848"
},
"origin": "61.140.208.227",
#url
"url": "http://httpbin.org/get?name=germey&age=22"
}
3、GET请求的响应
r.status_code #响应状态码,200是正常访问
r.content #响应体的二进制
r.text #字符串方式的响应体,响应体的HTML文本
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.encoding #获取编码方式
r.apparent_encoding #备选编码方式
#*特殊方法*#
r.json() #Requests中内置的JSON解码器
r.raise_for_status() #失败请求(非200响应)抛出异常
(1)、响应体
r.content
r.text
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
response = requests.get(url='https://github.com/favicon.ico',headers=headers)
print(response.content) #返回页面对应的二进制
print(response.text) #返回页面对应的字节编码
比较长就不贴上来了
(2)、请求头headers
在访问某些网站的时候,网站一般都会有反爬虫机制,这个时候我们需要模拟正常的认为浏览让网站觉得我们不是爬虫,是正常的认为在浏览,这时网站就会对你的需求进行正常的响应,所以我们需要对请求头headers进行设置
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}
三、POST请求(data参数)
了解完get请求,post请求是往网页上传数据
1、最基本的post请求
import requests
response = requests.post(url,data=data)
2、传入data数据
对于post请求来说,一般需要传入一些参数,我们可以使用data这个参数传入数据
import requests
formdata = {
"type": "AUTO",
"i": "i love python",
"doctype": "json",
"xmlVersion": "1.8",
"keyfrom": "fanyi.web",
"ue": "UTF-8",
"action": "FY_BY_ENTER",
"typoResult": "true"
}
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
response = requests.post(url, data=formdata, headers=headers)
print(response.text)
# 如果是json文件可以直接显示
print(response.json())