添加cookies
分为手动添加cookies 和 自动添加cookies
在登陆网页之后会在本地存储你的cookie信息,用于身份验证,就像是一把钥匙,我们可以手动添加cookie 和 自动添加cookie 当然自动添加cookie 是建立在手动的基础上,
手动添加cookie
# 手动添加cookie 比较简单, 因为cookie 是存储在头部信息中的 如果想要添加cookie信息,只需要在header 中增加一条key
header = {
'User-agent': '321',
'cookie': 'cookie'
}
url = "http://www.baidu.com"
# 创建Request对象
Res = urllib.request.Request(url, headers = header)
response = urllib.request.urlopen(Res)
data = response.read().decode()
自动添加cookie
因为添加cookie 信息是用于验证身份的, 自动存储cookie 信息我们需要的是登陆存储的cookie 我们首先要简单了解 post 请求:
post 请求是指网页向后端发送信息所用到的请求方式,其中包含了后端开发人员定义的验证信息,比如username pwd 以及其他用于验证的信息
import urllib.request
login_url = 'https://passport.baidu.com/v2/?login'
header = {
"User-agent": '123'
}
# 这就是post请求需要发送的信息, 仅用作示例
login_form_data = {
'username': '123',
'pwd': '123',
'id_firm': '123'
}
from html import cookieJar
# 调用http方法中的cookieJar方法来自动存储cookie
cookie_Jar = cookiejar.CookieJar()
# 创建可以调用cookieJar 的处理器, 传递cookie_jar
cookie_handler = urllib.request.HTTPCookieProcessor(cookie_jar)
# 根据处理器生成相应的opener
opener = urllib.build_opener(cookie_handler)
# 带着参数向登陆页面发送post 请求 请求登陆
# 创建请求对象
# 转义
import urllib.parse
parsed_data = urllib.parse.urlencode(login_form_data).encode('utf-8')
# !! 注意这里的data 并不接受字典的类型,我们需要对其进行转码让equest 接受这个参数,
login_request = urllib.request.Request(login_url, headers=header, data=parsed_data)
# 通过使用opener 来请求登录 登录页面返回一个cookie 信息,
# 在下面这行代码中,如果成功之后会直接将cookie信息存储在cookie_jar 当中,
opener.open(login_request)
n_url = 'http://www.baidu.com'
n_request = urllib.request.Request(n_url, headers=header)
# 用我们创建好的含有cookie 信息的opener 来登陆页面
response = opener.open(n_request)
data= response.read().decode('utf-8')