[Python]网络爬虫(三):使用cookiejar管理cookie 以及 模拟登录知乎

大家好哈,上一节我们研究了一下爬虫的异常处理问题,那么接下来我们一起来看一下Cookie的使用。

为什么要使用Cookie呢?

Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用python3的cookiejar模块来保存cookie信息,然后模拟登录。

在此之前呢,我们必须先介绍一个opener的概念。

1.Opener

当你获取一个URL你使用一个opener。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url,data,timeout。

如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。

2.Cookiejar

cookiejar模块的主要作用是提供可存储cookie的对象,以便于与urllib模块配合使用来访问Internet资源。Cookiejar模块非常强大,我们可以利用本模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。

它们的关系:CookieJar —-派生—->FileCookieJar  —-派生—–>MozillaCookieJar和LWPCookieJar

1)获取Cookie保存到变量

首先,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中,先来感受一下

  • 11
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python 爬虫使用 cookie 登录,一般需要以下步骤: 1. 发送登录请求,获取登录成功后的 cookie。 2. 将 cookie 保存下来,后续请求时带上 cookie。 下面是一个示例代码,假设登录成功后返回的 cookie 存储在变量 `cookie_str` 中: ```python import requests # 登录请求的 URL 和参数 login_url = 'http://example.com/login' login_data = {'username': 'your_username', 'password': 'your_password'} # 发送登录请求 session = requests.Session() response = session.post(login_url, data=login_data) # 获取 cookie,转换为字典格式 cookies = requests.utils.dict_from_cookiejar(session.cookies) # 将 cookie 转换为字符串格式,用于保存到文件或数据库中 cookie_str = '; '.join([f'{key}={value}' for key, value in cookies.items()]) # 将 cookie 保存到文件中 with open('cookie.txt', 'w') as f: f.write(cookie_str) # 后续请求时带上 cookie headers = {'Cookie': cookie_str} response = requests.get('http://example.com/some_page', headers=headers) ``` 在后续的请求中,需要将 cookie 以字符串格式加入到请求头部,示例代码中使用了 `headers` 参数来设置请求头部。如果需要从文件中读取保存的 cookie,可以使用以下代码: ```python # 从文件中读取 cookie with open('cookie.txt', 'r') as f: cookie_str = f.read().strip() # 将 cookie 以字典格式加入到 session session = requests.Session() cookies = requests.utils.cookiejar_from_dict({cookie.split('=')[0]: cookie.split('=')[1] for cookie in cookie_str.split('; ')}) session.cookies.update(cookies) # 后续请求时带上 cookie headers = {'Cookie': cookie_str} response = session.get('http://example.com/some_page', headers=headers) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值