Cookie(饼干线)
<1>原理:弥补http不对用户身份判断的缺点。
cookie 就是在客户访问脚本的同时,通过客户的浏览器,在客户硬盘上写入纪录数据 ,当下次客户访问脚本时取回数据信息,从而达到身份判别的功能,cookie 常用在身份校验中。
cookie存储的数据量有限,存放在Response Headers(响应头中)
实例一:使用cookie模仿用户登录,并保存下来
# -*- coding:utf-8 -*-
# 使用cookie模仿用户登录
from urllibimport request
url =" https://weibo.com/u/7200470366/home "
headers = {
"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 "
"(KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
}
# 使用request下的Requert发送一个请求,返回一个对象
req = request.Request(url=url, headers=headers)
# 使用request下的urlopen发送一个最简单的请求,得到一个回应
resp = request.urlopen(req)
# print(resp.read().decode('utf-8')) # 打印出网页的源码
# 将网页的源码以文件的形式存储
with open("weibo.html", 'w',encoding='utf-8')as f:
f.write(resp.read().decode('utf-8'))
实例二:使用HTTPCookieJar模拟用户登录(不适用cookie)
# -*- coding:utf-8 -*-
from urllibimport request
from urllibimport parse
from http.cookiejarimport CookieJar
# 1、登录
# 1.1创建一个cookiejar对象
cookiejar = CookieJar()
# 1.2使用cookieJar创建一个HTTPCookieProcess
handler = request.HTTPCookieProcessor(cookiejar)
# 1.3使用上一步创建handler创建一个opener
opener = request.build_opener(handler)
# 1.4使用opener发送一个请求
url ="https://weibo.com/u/7200470366/home"
header = {
'user-agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 '
'(KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
}
data = {
'emile':'2445131763@qq.com',
'password':'041712gf'
}
req = request.Request(url=url, headers=header, data=parse.urlencode(data).encode('utf-8'))
request.urlopen(req)
# 2、访问个人主页
weibo_url ="https://weibo.com/u/7200470366/home"
resp = request.urlopen(weibo_url)
with open('weibo02.html', 'w')as f:
f.write(resp.read().decode('utf-8'))
Requests库
<1>发送get请求: response = requests.get("http://www.baidu.com")
<2>response的一些属性:
#print(resp.text) # text是编码过的
print(resp.content.decode('utf-8')) # content是没有编码的
print(resp.url) # 查看完整的网页链接
print(resp.encoding) # 查看响应头部字符编码
print(resp.status_code) # 查看响应码
<3>发送post请求: response = requests.post("http://www.baidu.com", data=data)
post请求里面回添加一个data属性
get请求里面添加params属性
<4>添加代理服务器去请求服务器:
# 免费代理的网站:https://www.kuaidaili.com/free/
import requests
header = {
'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 '
'(KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
}
proxies = {# 添加代理
"HTTP":"122.226.57.70"
}
response = requests.get("https://www.baidu.com", headers=header, proxies=proxies)
# print(response.text)
with open('baidu01.html', 'w', encoding='utf-8')as f:
f.write(response.content.decode('utf-8'))
<5>处理cookie信息
import requests
response = requests.get("http://www.baidu.com")
print(response.cookies.get_dict())# 拿到该网站的cookie信息,,并以字典的形式返回
Session: