爬虫_urllib的Cookie登录

适用场景:数据采集的时候需要经过登录然后进入到某个页面

案例目的是跳过登录直接进入个人信息页面

 

 经过分析:

1.请求的url地址为:https://weibo.cn/2954041765/info

2.请求方式为:get

代码如下:

复制代码
#适用的场景:数据采集的时候需要绕过登录然后进入到某个页面
#

import urllib.request
url = 'https://weibo.cn/2954041765/info'

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
# 请求对象定制
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 fp:
    fp.write(content)
复制代码

 

 运行结果报错提示编码问题??再次检查页面源码。确实是“utf-8”编码,那么这是为什么呢?

 

 这里是因为涉及到反爬手段的另一种方式登录验证,此时没有经过登录而直接访问个人信息页面,系统会直接跳转到登录界面,现在检查一下登录页面的编码方式。

 

 发现登录界面的编码方式为“gb2312”,修改代码如下:

复制代码
# 适用的场景:数据采集的时候需要绕过登录然后进入到某个页面
# 个人信息页面是utf-8 但是还是报错了编码错误,因为并没有进入到个人信息页面,而是跳转到了登录页面
# 那么登录页面不是utf-8 所以报错

import urllib.request
url = 'https://weibo.cn/2954041765/info'

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
# 请求对象定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应的数据
#content = response.read().decode('utf-8')
content = response.read().decode('gb2312')

#将数据保存到本地
#with open('weibo.html','w',encoding='utf-8')as fp:
with open('weibo.html','w',encoding='gb2312')as fp:
    fp.write(content)
复制代码

 

 但是现在虽然没有报错,但是没有访问到数据,这是因为请求头中缺少东西,通过页面查看请求头内容。

 

 修改代码如下:

复制代码
# 适用的场景:数据采集的时候需要绕过登录然后进入到某个页面
# 个人信息页面是utf-8 但是还是报错了编码错误,因为并没有进入到个人信息页面,而是跳转到了登录页面
# 那么登录页面不是utf-8 所以报错

import urllib.request
url = 'https://weibo.cn/2954041765/info'
# 在爬虫编码中请求头凡是带:XX的需要注释掉,没用
# 在爬虫编码中 accept-encoding 也需要注释掉
headers = {
    # ':authority': 'weibo.cn',
    # ':method': 'GET',
    # ':path': '/2954041765/info',
    # ':scheme': 'https',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    # 'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'zh-CN,zh;q=0.9',
    'cache-control': 'max-age=0',
    # cookie中携带着你的登录信息,如果有登录之后的cookie那么我们就可以携带着cookie进入到任何页面
    'cookie': '_T_WM=8a785c08deab85c48ef2249a6668e2b0; WEIBOCN_WM=3349; H5_wentry=H5; backURL=https%3A%2F%2Fweibo.cn; SUB=_2A25PiFDFDeRhGeRH7lYR9C_LzTmIHXVtc3CNrDV6PUJbkdCOLWqskW1NTbHM80fulE5GH_NEgvXy-WaTaxHaRYry; SCF=AlmOQMyzOJQiHFMUpDm7MVxl372nctojonGfNfeT4jJzhLCZEJcDfoTkYQKh9xJJizOjPtS0VndEd9bebLKLZ3A.; SSOLoginState=1653350550',
    # referer 判断当前路径是不是由上一个路径进来的。一般情况下是做图片的防盗链
    'referer': 'https://weibo.cn/',
    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
# 请求对象定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)
# 获取响应的数据
#content = response.read().decode('utf-8')
content = response.read().decode('utf-8')

#将数据保存到本地
#with open('weibo.html','w',encoding='utf-8')as fp:
with open('weibo.html','w',encoding='utf-8')as fp:
    fp.write(content)
复制代码

运行代码后查看下载后的html页面

 

cookie能解决市场上60%的反爬手段 

 

posted @   创客未来  阅读(163)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-05-24 Golang 错误处理
点击右上角即可分享
微信分享提示