python爬虫中Session 和 cookie的使用

文章介绍了在爬虫中如何处理需要登录的网页,包括通过Cookie登录、使用Session保持会话以及设置代理和重试策略。示例代码展示了如何使用Python的requests库进行模拟登录并维持相同外网IP的会话。

前言

大家好,我是爱摸鱼的水花
在日常采集数据的过程中,我们经常会遇到有些页面只有登录之后我们才可以访问,并且在登录之后可以连续进行一系列操作,但是有些时候又需要重新进行登录。甚至有些网站登录很长的时间都不会失效,这种情况又是为什么?其实这里面涉及到 Session 和 cookie 的相关知识。

img

cookie的基本知识想必大家做爬虫的都很清楚,关于Session这里可以好好的解释下,Session最简单的理解就是会话,主要作用就是用来记录一个用户在目标网站上的一些行为、一些状态,而这些用户状态可以利用Cookie中的Session ID来标识。

cookie和Session一般会在网站的反爬中应用中比较常见。

在访问某些网站的时候,是需要先进行登录才能进行下一步操作的。如果利用爬虫程序模拟人登陆的行为,主要有以下三种:

  1. 爬虫代码里通过request.post里的参数data中,有自己的登录的账号信息。
  2. 访问页面的时候,从header是中找到cookie并复制,写到python脚本里的headers中,但是在使用过程中cookie的时效性也是需要考虑的。
  3. 通过session方法,是比较推荐的一种方式,比如python使用Keep-Alive保持相同代理IP进行采集,并进行状态判断,失败后重新发起,代码如下:
#! -- encoding:utf-8 -- import requests import requests.adapters import time # 导入time模块,用于等待

#要访问的目标页面
targetUrlList = [ “https://httpbin.org/ip”, “https://httpbin.org/headers”, “https://httpbin.org/user-agent”, ]

#代理服务器(产品官网 www.16yun.cn)
proxyHost = “t.16yun.cn” proxyPort =31111”

#代理验证信息
proxyUser = “16yun” proxyPass = “16ip” proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"

#设置 http和https访问都是用HTTP代理
proxies = { “http”: proxyMeta, “https”: proxyMeta, }

#设置代理和重试策略
adapter = requests.adapters.HTTPAdapter( proxy=proxies, max_retries=3 )

#访问三次网站,使用相同的Session(keep-alive),均能够保持相同的外网IP
with requests.session() as s: # 设置cookie # cookie_dict = {JSESSION:123456789} # cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True) # s.cookies = cookies

# 为session设置代理和重试策略
s.mount("http://", adapter)
s.mount("https://", adapter)

for i in range(3):
    for j, url in enumerate(targetUrlList):
        r = s.get(url)
        # 判断状态码是否为200,如果不是,等待1秒后重试
        while r.status_code != 200: # 添加循环条件
            print(f"第{i+1}次访问第{j+1}个网站的状态码为{r.status_code},等待1秒后重试")
            time.sleep(1) # 等待1秒
            r = s.get(url) # 重新发起请求
        print(f"第{i+1}次访问第{j+1}个网站的结果:")
        print(r.text)

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
完整资料扫码无偿领取!

### [](https://blog.youkuaiyun.com/Python_cocola/article/details/130483196?spm=1001.2014.3001.5501)[](https://blog.youkuaiyun.com/Javachichi/article/details/122513096?spm=1001.2014.3001.5501)[](https://blog.youkuaiyun.com/m0_57081622/article/details/122378123?spm=1001.2014.3001.5501)一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值