使用urllib.request库获取cookie登录

一 、使用手动添加cookie的方式来获取页面

要获取的是页面 xxx.com/member/ 的内容,这个页面是在登录之后跳转到一个新的页面才得到。

用爬虫爬取页面A的内容时,所需要的cookie是在请求页面A时请求头【Request Headers】里面的cookie,用浏览器进行抓包时,如果页面A是从其他页面跳转过来的,可以将页面A进行刷新操作进行抓包

在这里插入图片描述

上图就是 member 页面进行抓包时获取的请求头里面的内容。请求头里面的cookie就是登陆 member 页面所需要的凭证,将该cookie添加到下面代码中就可以抓取 member 页面的内容。

import urllib.request
url="http://www.yaozh.com/member/"
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
    "Cookie":"http://www.yaozh.com/member/这个页面请求头里面的cookie"
}
#创建请求对象,改变请求头
request=urllib.request.Request(url,headers=headers)
#请求消息
response=urllib.request.urlopen(request)
data=response.read()
with open("cookie.html","wb") as f:
    f.write(data)

二、使用 cookiejar 自动获取登录后获得的cookie

""" 
获取个人中心的页面
1.代码登录 登录成功 cookie(有效)
2.自动带着cookie去请求个人中心
cookiejar自动保存cookie
"""
import urllib.request
from http import cookiejar
import urllib.parse

# 添加cookie也要有cookie的处理器
# get:返回登录页面
# post:返回登录后的结果,账户已经登录进去了的页面

#  1.代码登录
    # 1.1 登录的网址
login_url="https://www.yaozh.com/login"
    # 1.2 登录的参数 
    # Form Data
login_form_data={
    "username":"dong123456",
    "pwd":"******",
    "formhash":"892EF2A017",
    "backurl":"https%253A%252F%252Fwww.yaozh.com%252F"
    }
# 使用urllib.request时  post方法所携带的参数不能是字典形式
login_form_data_final=urllib.parse.urlencode(login_form_data)
    # 1.3 发送登录请求POST,
    #自动保存cookie
cook_jar=cookiejar.CookieJar()
    # 定义有添加 cookie功能的处理器
cook_handler=urllib.request.HTTPCookieProcessor(cook_jar)
    # 根据处理器生成opener
opener=urllib.request.build_opener(cook_handler)
    # 带着参数发送post请求,制作请求对象
    # 添加请求头
headers={
    "Users-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"
    }
    # 此时headers里面还没有cookie,还没有登录
login_request=urllib.request.Request(login_url,headers=headers,data=login_form_data_final.encode("utf-8"))
    # 如果登录成功。cookjar自动保存cookie,opener里面有cookjar,所以opener里有cookie
    #下面一步不需要返回数据,只要成功登陆就行
opener.open(login_request)

#  2.代码带着cookie去访问 个人中心
center_url="http://www.yaozh.com/member/"
center_request=urllib.request.Request(center_url,headers=headers)
response=opener.open(center_url)
data=response.read()
 with open("cookie_02.html","wb") as f:
     f.write(data)

在用账号、密码登录一个网站时,请求头里面会带着一些cookie文件去登录,这些cookie是储存在本地文件中的。登录成功之后,response里面会返回 set-cookie ,这是服务器端返回给用户端的 cookie 值,在之后访问网站中的其他页面时,请求就会带着 set-cookie 中的 cookie 和部分登录之前就存储在本地文件中的 cookie 去访问。

在本例中,通过 print(cookiejar.CookieJar())可以得到访问个人中心页面时请求头里面的cookie,这些 cookie 是访问时必须的

<CookieJar[<Cookie yaozh_jobstatus=kptta67UcJieW6zKnFSe2JyXnoaZbptol5qHnKZxanJT1qeSoMZYoNdzaJFyVMfU0MiVlpRrmmuHn9ibbHFXpJLUrZCnyqPKhnSqm2linYeCd2fa6F156Ed37412961242582d23A81Tlp2ZmWqbbp6Uh5ymcWlyU9WinpiDcdieamqbWmOYnpeZl5yUbZtnmJiHnLA%3Dc017bd785645e38f852dcb7111ff54ae for .yaozh.com/>, 
<Cookie yaozh_logintime=1595838366 for .yaozh.com/>, 
<Cookie yaozh_user=876326%09dong123456 for .yaozh.com/>,
<Cookie yaozh_userId=876326 for .yaozh.com/>, 
<Cookie PHPSESSID=v34tinlllfv5ap3ku6aqju8p62 for www.yaozh.com/>, 
<Cookie acw_tc=2f624a7615958383660296581e5bfb406b61c57cdcd52602c8ae1f584de09b for www.yaozh.com/>]>

这6个必须的 cookie 由以下两部分组成

在这里插入图片描述
在这里插入图片描述

在请求[http://www.yaozh.com/member/]这个页面时,通过抓包所得到的的cookie不止6个,但是都包含了通过cookiejar所存储的cookie

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值