文章目录

  • Python爬虫——Cookie模拟登录
  • 1、Cookie模拟登录
  • 2、Handler处理器


Python爬虫——Cookie模拟登录

1、Cookie模拟登录

现在很多网站需要用户成功登录后才可以查看相关内容。使用Cookie 模拟登录可以很好地解决这种问题。

Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie是一个记录了用户登录状态以及用户属性的加密字符串,Cookie可以保持登录信息到用户下次与服务器的会话。Cookie 以键 / 值对形式存储。

Cookie 验证流程:当用户第一次登陆网站时,服务端会在返回的响应头 Response Headers 中添加 Cookie数据, 浏览器接收到响应头的信息后,会将 Cookie 保存至浏览器本地存储中,当用户再次向该网站发送请求时,请求头中就会携带 Cookie,这样服务器通过读取 Cookie 就能识别登陆用户了。

Cookie在爬虫方面最典型的应用是判定注册用户是否已经登录网站,用户在请求参数中传入Cookie,在发送请求访问url时,会跳过登录界面,跳过登录验证流程,从而直接访问到想要的网站数据。

Cookie 模拟登录使用实例:

注册一个微博账号,登录微博并进入个人主页,使用F12打开浏览器的调试工具,在 Headers 选项中找到请求头Request Headers 中的 Cookie 信息,复制保存。

import urllib.request
import urllib.parse

url = 'https://weibo.com/u/6768120693/home'

#请求头参数
headers = {
    'cookie': 'UPSTREAM-V-WEIBO-COM=35846f552801987f8c1e8f7cec0e2230; _s_tentry=passport.weibo.com; Apache=3550042880907.0825.1657677410065; SINAGLOBAL=3550042880907.0825.1657677410065; ULV=1657677410241:1:1:1:3550042880907.0825.1657677410065:; XSRF-TOKEN=wpUjXoB3U_T8KzDcYBGeQmeg; WBPSESS=dg5zs_KFY81p0FnDKmb34Ti2iJGu9QxJdhMzG8ikVBN-CyoFvr-FTOapET7oPxP0FTRcDR-4ospowpRpkqiE8Gga-FNf9Bekers3TFYG5vxMEBfXahOBmCiJK7XwTPB_GaeInt3uz0W9CfgA545n9SWoyDpY910MV0NogSygO48=; PC_TOKEN=fd99713024; login_sid_t=6d987092eac2182f810741424691738b; cross_origin_proto=SSL; WBStorage=4d96c54e|undefined; wb_view_log=1920*10801; SUB=_2A25Py7HwDeRhGeBJ7VoQ8i7Kwj-IHXVsoKQ4rDV8PUNbmtAKLVPNkW9NRi9nZzdxPj2ym6xf8i-dSCWgSnyp4GVC; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5e8Y.xknmxKI8AQq4L07-c5JpX5KzhUgL.FoqNSonpeo5c1Ke2dJLoI0.LxKqL1h5L1KzLxKqL1KqLBK-LxKqL1hnL1K2LxKML1-2L1hBLxK-L1K5L12BLxK-LB-BL1KUT-27t; ALF=1689318688; SSOLoginState=1657782688; wvr=6; wb_view_log_6768120693=1920*10801; webim_unReadCount=%7B%22time%22%3A1657782816028%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A40%2C%22msgbox%22%3A0%7D',
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10'
}

request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')

with open('weibo.html','w',encoding='utf-8') as file:
    file.write(content)

2、Handler处理器

Handler处理器可以定制更高级的请求头,基本的urlopen()方法不支持代理、动态cookie等其他的HTTP/HTTPS高级功能。

Handler处理器使用步骤:

  • 使用Handler处理器(如HTTPHandler或HTTPSHandler)来创建特定功能的处理器对象;
  • 然后通过urllib.request.build_opener()方法使用处理器,构建opener对象;
  • 使用构建的opener对象,调用open()方法发送请求。

使用实例:

import urllib.request

url = 'http://www.baidu.com'

headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.5261 SLBChan/10'
}
#1、获取HTTPHandler处理器对象
http_handler = urllib.request.HTTPHandler()
#获取HTTPSHandler处理器对象
https_handler = urllib.request.HTTPSHandler()

#2、构建opener对象
http_opener = urllib.request.build_opener(http_handler)
https_opener = urllib.request.build_opener(https_handler)

#定制请求
request = urllib.request.Request(url=url,headers=headers)

#3、调用open方法发送请求
http_response = http_opener.open(request)
https_response = https_opener.open(request)

print(http_response)
print(https_response)

执行结果:

<http.client.HTTPResponse object at 0x000002220510A470>
<http.client.HTTPResponse object at 0x0000022205116CC0>