【python爬虫】http.cookiejar库之CookieJar,模拟登录与访问

本文记录自己在学习爬虫的路上遇到的比较有用的知识点,分享出来供大家一起学习

http.cookiejar库之CookieJar

CookieJar和HTTPCookieProcessor

我们在使用爬虫的时候,经常会用到cookie进行模拟登陆和访问。在使用urllib库做爬虫,我们需要借助http.cookiejar库中的CookieJar来实现。

CookieJar类有一些子类,分别是FileCookieJar,MozillaCookieJar,LWPCookieJar。

  • CookieJar:管理HTTPcookie值、存储HTTP请求生成的cookie、向传出的HTTP请求添加cookie的对象。整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie也将丢失。
  • FileCookieJar:(filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie的文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
  • MozillaCookieJar:(filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与Mozilla浏览器cookies.txt兼容的FileCookieJar实例。
  • LWPCookieJar:(filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的Set-Cookie3 文件格式兼容的FileCookieJar实例。

其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar() 或 LWPCookieJar()。当然,如果我们对cookie有定制的需要,那么我们也要借助HTTPCookieProcess处理器来处理。具体看下面代码。

1、登录后直接添加Cookie

该方法简单粗暴,最简单也是最有效。以人人网为例,代码如下:

from  urllib import request
# 直接添加使用cookie
dapeng_url='http://www.renren.com/880151247/profile'
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0',
    'Cookie':'anonymid=khkiznf5-7c52d5; depovince=HEN; jebecookies=2dd8d6fa-0e86-4413-ae7d-49bdcb5cad36|||||; _r01_=1; ick_login=b9539ae2-29cb-45f4-b50b-5007c19e651e; taihe_bi_sdk_uid=6a6851b67076bd8a275817a06e18f92f; taihe_bi_sdk_session=4610e6c68a5a8f32aaeca524e411282a; t=9cad4d94e2e0844d2349513cfecd8a3c8; societyguester=9cad4d94e2e0844d2349513cfecd8a3c8; id=975409048; xnsid=2eeaf6b9; ver=7.0; loginfrom=null; JSESSIONID=abcZyK1nfCxVk6Qq_frxx; wp-win=1605530805558-1605530805559'
}
req=request.Request(url=dapeng_url,headers=headers)
resp=request.urlopen(req)
# print(resp.read().decode('utf-8'))
with open('renren.html','w',encoding='utf-8') as fp:
    # write必须写入str
    fp.write(resp.read().decode('utf-8'))

这里我们查看返回结果,查看后没问题


2、自动登录获取返回的Cookie

1.登录过程

注意:这里email,password需自己设置,就是登录账号和密码

# 1.1创建一个cookiejar对象
cookiejar=CookieJar()
#1.2使用cookiejaz创建一个HTTPCookieProcess对象
handler=request.HTTPCookieProcessor(cookiejar)
# #1.3使用上一步创建的handler创建一个opener
opener=request.build_opener(handler)
# 1.4使用opener发送登录的请求(人人网的邮箱和密码)
headers={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'
}
data={
    'email':'XXXXXX',
    'password':'XXXXXX'
}
login_url='http://www.renren.com/PLogin.do'
req=request.Request(url=login_url,headers=headers,data=parse.urlencode(data).encode('utf-8'))
opener.open(req)

2.访问个人主页

注意:获取个人主页的页面的时候,不要新建一个opener,而应该使用之前的那个opener,因为之前的那个opener已经包含了登录所需要的cookie信息

dapeng_url='http://www.renren.com/880151247/profile'
req=request.Request(url=dapeng_url,headers=headers)
resp=opener.open(req)
with open('renren.html','w',encoding='utf-8') as fp:
    # write必须写入str
    fp.write(resp.read().decode('utf-8'))

3.完整代码(封装函数)

#-*- coding:utf-8 -*-
__date__ = '2020/11/16 23:18'

from urllib import request,parse
from http.cookiejar import CookieJar

headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'
    }
def get_open():
    # 1.登录
    # 1.1创建一个cookiejar对象
    cookiejar=CookieJar()
    #1.2使用cookiejaz创建一个HTTPCookieProcess对象
    handler=request.HTTPCookieProcessor(cookiejar)
    # #1.3使用上一步创建的handler创建一个opener
    opener=request.build_opener(handler)
    return opener

def login_renren(opener):
    # 1.4使用opener发送登录的请求(人人网的邮箱和密码)
	data={
    	'email':'XXXXXX',
    	'password':'XXXXXX'
	}
    login_url='http://www.renren.com/PLogin.do'
    req=request.Request(url=login_url,headers=headers,data=parse.urlencode(data).encode('utf-8'))
    opener.open(req)
def visit_profile(opener):
    # 2.访问个人主页
    dapeng_url='http://www.renren.com/880151247/profile'
    req=request.Request(url=dapeng_url,headers=headers)
    resp=opener.open(req)
    with open('renren.html','w',encoding='utf-8') as fp:
        # write必须写入str
        fp.write(resp.read().decode('utf-8'))

if __name__ == '__main__':
    opener=get_open()
    login_renren(opener)
    visit_profile(opener)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模拟登录是指通过编写程序来模拟手动输入账号密码的过程,以获取登录成功后的cookie,从而可以直接访问需要登录才能进入的页面,并获取所需的数据。在Python中,可以使用第三方如requests和urllib来实现模拟登录。 使用requests进行模拟登录的步骤如下: 1. 导入必要的:import requests 2. 创建一个Session对象:session = requests.Session() 3. 发送GET请求获取登录页面:wb_data = session.get(url).text 4. 解析页面,获取登录表单中的_xsrf参数和其他必要的参数:soup = BeautifulSoup(wb_data, 'lxml'),xsrf = soup.select('input\[value\]')\[-1\].get('value') 5. 构造登录表单数据:data = {'_xsrf': xsrf, 'password': 'your password', 'remember_me': 'true', 'email': 'your email'} 6. 提交登录表单:log_post = session.post('http://www.zhihu.com/login/email', data=data) 7. 验证是否成功登录:test = session.get(url),wb_data = BeautifulSoup(test.text, 'lxml'),wb_data.select('#feed-0 > div.feed-item-inner > div.feed-main > div.feed-content > h2 > a') 另外,还可以使用urllib来模拟登录,通过保存cookie来保持登录状态。具体步骤如下: 1. 导入必要的:import http.cookiejar, urllib.request 2. 初始化cookie和opener:cookie = http.cookiejar.CookieJar(),opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookie)) 3. 配置opener为全局:urllib.request.install_opener(opener) 4. 构造请求头和请求对象:headers = {},request = urllib.request.Request(url, headers=headers) 5. 发送请求并保存cookie:response = urllib.request.urlopen(request) 以上是使用Python进行模拟登录的基本步骤,具体的实践可以根据不同的网站和需求进行相应的调整和修改。 #### 引用[.reference_title] - *1* [python爬虫之模拟登录](https://blog.csdn.net/qimo__/article/details/130450046)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python爬虫基础-模拟登陆](https://blog.csdn.net/weixin_34396103/article/details/89616422)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python爬虫——模拟登陆](https://blog.csdn.net/qq_16121469/article/details/127718925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值