requests模块
安装
pip3 install requests
图片防盗链
referer 从哪个网页来的,爬取的时候带上
url的编码和解码
路径出现%...
from urllib.parse import urlencode,unquote
print(unquote('%E7%BE%8E%E5%A5%B3'))
模块使用
import requests
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
'referer': 'https://www.mzitu.com/225078/2'
}
res = requests.get('https://www.mzitu.com/', headers=header)
# 2 请求地址中携带数据(两种方式,推荐第二种)
拼接在url,或者,params参数
res=requests.get('https://www.baidu.com/s',headers=header,params={'wd':'美女'})
# 3 请求带cookie(两种方式)
# 方式一
header = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
'cookie':'key=asdfasdfasdfsdfsaasdf;key2=asdfasdf;key3=asdfasdf'
}
# 方式二
cookies是一个字典或者CookieJar对象
res=requests.get('http://127.0.0.1:8000/index/',headers=header,cookies={'key':'asdfasdf'})
# 4 发送post请求,携带数据(urlencoded和json)
res=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
res=requests.post('http://127.0.0.1:8000/index/',json={'age':1,},)
# 5 自动携带cookie
session=requests.session()
res=session.post('http://127.0.0.1:8000/index/') # 假设这个请求登录了
res1=session.get('http://127.0.0.1:8000/order/') # 不需要手动带cookie,session会处理
# 6 response对象
respone=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
respone.text # 响应的文本
res.json() # json 格式
respone.content # 响应体的二进制
respone.status_code # 响应状态码
respone.headers # 响应头
respone.cookies # cookie
respone.cookies.get_dict() # 把cookie转成字典
respone.cookies.items() # key和value
respone.url # 请求的url
respone.history #[]放重定向之前的地址
respone.encoding # 响应的编码方式
respone.iter_content() # 图片,视频,大文件,一点一点循环取出来
# 7 编码问题
乱码解决:
res.encoding='gb2312'
或
res.encoding=res.apparent_encoding
# 8 解析json
import json
respone=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
print(type(respone.text)) # 响应的文本
print(json.loads(respone.text))
print(respone.json())
# 9 高级用法之ssl(了解)
import requests
respone=requests.get('https://www.12306.cn') #不验证证书,报警告,返回200
# 使用证书,需要手动携带
import requests
respone=requests.get('https://www.12306.cn',cert=('/path/server.crt','/path/key'))
# 10 代理
espone=requests.get('http://127.0.0.1:8000/index/',proxies={'http':'代理的地址和端口号',})
# 代理池:列表放了一堆代理ip,每次随机取一个,再发请求就不会封ip了
# 高匿和透明代理?高匿代理,后端无论如何拿不到你的ip,使用透明,后端能够拿到你的ip
# 后端如何拿到透明代理的ip, 后端:X-Forwarded-For
respone=requests.get('https://www.baidu.com/',proxies={'http':'27.46.20.226:8888',})
# 11 超时设置
import requests
respone=requests.get('https://www.baidu.com',timeout=0.0001)
# 12 认证设置(没有用的了)
import requests
r=requests.get('xxx',auth=('user','password'))
# 13 异常处理
import requests
from requests.exceptions import * #可以查看requests.exceptions获取异常类型
try:
r=requests.get('http://www.baidu.com',timeout=0.00001)
except Exception as e:
print(e)
# 14 上传文件
res=requests.post('http://127.0.0.1:8000/index/',files={'myfile':open('a.jpg','rb')})