爬虫_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%的反爬手段
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-05-24 Golang 错误处理