1. requests
requests是基于urllib的再一次封装,具有urllib的一切特性,并且API调用更加方便,一个基于网络请求的模块,模拟浏览器发起请求
2.为什么使用requests模块?
1.自动处理url编码
2.自动处理post请求参数
3.简化cookie和代理的操作
cookie的操作:
- 创建一个cookiejar对象
- 创建一个handler对象
- 创建一个opener对象
代理的操作:
- 创建handler对象,代理ip和端口封装到该对象
- 创建opener对象
3.使用流程:
安装:pip3 install requests
- 指定url
- 使用requests模块发起请求
- 获取响应的二进制数据
- 进行持久化存储
requests包括五中请求:get,post,ajax的get请求,ajax的post请求,综合import requests
- 指定url
url = ‘https://www.sogou.com/’
- 发起get请求:get方法会返回请求成功的相应对象
response = requests.get(url=url)
- 获取响应中的数据值:text可以获取响应对象中字符串形式的页面数据
page_data = response.text
print(page_data)
- requests对象中其他重要属性:
- text可以获取响应对象中字符串形式的页面数据
- content获取的是response对象中二进制(byte)类型的页面数据
- response.status返回一个响应状态码
- response.headers返回响应头信息
urllib_cookies使用
from urllib import request
from http import cookiejar
import ssl
#创建HTTPSHandler处理器,支持发起https请求,忽略ssl认证
context = ssl._create_unverified_context()
https_handler = request.HTTPSHandler(
debuglevel=1,
context=context,
)
#创建cookie jar对象,用来存储cookie
cookie_jar = cookiejar.CookieJar()
#创建HTTPCookieProcessor处理器,用来使用和处理cookie
cookie_handler = request.HTTPCookieProcessor(cookiejar=cookie_jar)
opener = request.build_opener(https_handler,cookie_handler)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
req = request.Request(
url='http://www.baidu.com',
headers=headers
)
request.install_opener(opener)
response = request.urlopen(req,timeout=10)
print(response.code)
request_get()使用
import requests
url = 'http://college.gaokao.com/schlist'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
response = requests.get(url=url,params=None,headers=headers)
#获取响应结果
print(response.text) #页面源码
print(response.status_code) #状态码
print(response.headers) #响应头
print(response.request.headers) #获取请求头
print(response.content) #获取页面的二进制数据
request_post()使用
import requests
from_data = {
'username':'admin3',
'password':'admin123456',
}
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
url = 'http://127.0.0.1:8000/api/login/'
response = requests.post(url=url,data=from_data,headers=headers)
#获取响应结果
print(response.text) #页面源码
print(response.status_code) #状态码
print(response.headers) #响应头
print(response.request.headers) #获取请求头
print(response.content) #获取页面的二进制数据
# print(response.json()['token'])
#文件上传post请求
url = 'http://httpbin.org/post'
files = {'file':open('page.html','r',encoding='gbk')}
response = requests.post(url=url,files=files,headers=headers)
if response.status_code == 200:
print('上传成功')
print(response.text)
代理的使用
import requests
url = 'https://www.taobao.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
proxies = {
'http':'192.168.2.111:8082',
'http':'192.168.2.113:8083',
}
response = requests.get(url=url,params=None,headers=headers,proxies=proxies)
#获取响应结果
print(response.text) #页面源码
print(response.status_code) #状态码
print(response.headers) #响应头
print(response.request.headers) #获取请求头
print(response.content) #获取页面的二进制数据
#获取cookies
cookies = response.cookies
print(cookies)
cookies_dict = {}
for cookie in cookies:
cookies_dict[cookie.name] = cookie.value
# print(cookie.name,cookie.value)
print(cookies_dict)
#dict_from_cookiejar:把RequestsCookieJar对象换成字典
cookies_dict2 = requests.utils.dict_from_cookiejar(cookies)
print(cookies_dict2)
#######设置cookies############
#方式一:从浏览器获取cookies,放在请求头的头部
#方式二:通过设置请求的cookies参数,
requests.get(url=url,headers=headers,cookies=cookies_dict2)
print(response.status_code)
print('设置cookies后的请求头部',response.headers)