爬虫之CookieJar和session

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

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

CookieJar:管理HTTP cookie值、存储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处理器来处理。

import urllib
import urllib.request

import http.cookiejar as cookiejar

import urllib.parse

# 创建cookiejar对象,保存访问网络的cookie
cookie = cookiejar.CookieJar()

# HttpCookieProcessor ----->Handler
# HttpHandler ProxyHandler
cookie_handler = urllib.request.HTTPCookieProcessor(cookie)


# 使用handler创建Opener
opener = urllib.request.build_opener(cookie_handler)

# 豆瓣网页
# 登录POSRT
url = 'https://www.douban.com/accounts/login'
# form表单
'''
source=index_nav&form_email=18513106743&form_password=31415926abc'''

url_person = 'https://www.douban.com/people/164698173/'

# 全局安装,urllib.request.urlopen === 使用opener
urllib.request.install_opener(opener)

# 第一次请求登录获取cookier
params = {'source':'index_nav',
          'form_email':'12234543221',
          'form_password':'31415926abc'}

params = urllib.parse.urlencode(params).encode('utf-8')

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}

request = urllib.request.Request(url=url,data = params,headers=headers)

urllib.request.urlopen(request)

# 第二次获取个人主页,get请求
response = urllib.request.urlopen(url=url_person)


print(response.read().decode('utf-8'))
import requests

# 对于urllib 验证需要
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context

# 豆瓣
url = 'https://www.douban.com/accounts/login'
# form表单
'''
source=index_nav&form_email=1106743&form_password=31415926abc'''

url_person = 'https://www.douban.com/people/164698173/'

# 第一次请求登录获取cookier
params = {'source':'index_nav',
          'form_email':'1106743',
          'form_password':'31415926abc'}

# 会话在自己生命周期之内,多次进行网络请求,自动记录cookie
session = requests.Session()

# 第一步请求,登录
# 对于requests 模块,不需要urlencode
session.post(url=url,data=params,verify = False)


# 第二步,获取豆瓣,个人主页信息
response = session.get(url=url_person,verify = False)

response.encoding = 'utf-8'

print(response.text)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值