python获取登录后的cookie_python爬虫之使用cookie爬取登录后的界面、使用cookieFileJar保存cookie文件、cookie读取...

1、cookie & session简介

-由于http协议的无记忆性,人们为了弥补这个这个缺憾,所采用的一个补充协议

-cookie是发放给用户(即http浏览器)的一段信息(通常记录用户身份),session是保存在服务器上的对应的另一半信息,用来记录用户信息

(1)cookie和session的区别

-存放位置不同

-cookie不安全

-session会保存在服务器上一定时间,会过期

-单个cookie保存数据不超过4K,很多浏览器限制一个站点最多保存20个

(2)session的存放位置

-存在服务器端

-一般情况,session是放在(想要速度快的话放内存)内存中或者(默认放)数据库中

-没有cookie登录,可以看到,没有使用cookie则反馈网页为未登录状态

from urllib import request

if __name__ == '__main__':

url = "https://www.renren.com/965187997/profile"

#req = request.Request(url)

rsp = request.urlopen(url)

html = rsp.read().decode()

'''

UnicodeEncodeError: 'gbk' codec can't encode character '\ue600' in position 145620: illegal multibyte sequence

解决:改为utf-8

'''

with open("rsp.html","w") as f:

f.write(html)

2、cookie登录、访问、属性、保存

(1)直接把cookie复制下来,然后手动放入请求头(例:访问人人网)

# 爬虫使用cookie

from urllib import request

if __name__ == '__main__':

url = "http://www.renren.com/970362268"

headers = {

"cookie":"_r01_=1; ick=1a32e31e-bdfa-408b-8b87-68ac0c4ff4c7; anonymid=ju9fbgww-soghnp; depovince=GW; JSESSIONID=abcb7WJ_ynJeK_VXV2aOw; ick_login=c85d8114-439e-4d82-8e5f-10646cd37430; t=62d2b8164ae2b729d12263c9f4c482e68; societyguester=62d2b8164ae2b729d12263c9f4c482e68; id=970362268; xnsid=ff14ddfa; ver=7.0; loginfrom=null; jebe_key=16d9bc6a-222a-40ce-af09-9a18a0663e8c%7C57573f7fa1d38d00970b98271913a7f8%7C1554793573096%7C1%7C1554793573019; jebecookies=a908f08f-6694-4188-bd7c-91c1b8bd1024|||||; wp_fold=0"

}

req = request.Request(url=url,headers=headers)

rsp = request.urlopen(req)

html = rsp.read().decode()

with open("rsp.html","w",encoding="utf-8")as f:

# 将爬取的页面打印出来

print(html)

f.write(html)

(2)http模块包含一些关于cookie的模块,通过他们我们可以自动使用cookie

-CookieJar

-管理存储cookie,向传出的http请求添加cookie

-cookie存储在内存中,CookieJar实例回收后cookie将消失

-FileCookieJar

-使用文件管理cookie

-filename是保存cookie的文件

-MozillaCookieJar(filename,delayload=None,policy=None):

-创建与mocilla浏览器cookie.txt兼容的FileCookieJar实例

-LwpCookieJar(filename,delayload=None,polcy=None):

-创建与libwww-perl标准兼容的Set-Cookie3格式的FileCookieJar实例

-他们的关系是:CookieJar-->FileCookieJar-->MozillaCookieJar & LwpCookieJar

(3)利用cookiejar访问人人网

-自动使用cookie登录,大致流程是:

-打开登录页面后自动通过用户名密码登录

-自动提取反馈回来的cookie

-利用提取的cookie登录隐私页面

from urllib import request,parse

from http import cookiejar

#创建cookiejar的实例

cookie = cookiejar.CookieJar()

#生成cookie的管理器

cookie_handler = request.HTTPCookieProcessor(cookie)

#创建http请求管理器

http_handler = request.HTTPHandler()

#生成https管理器

https_handler = request.HTTPSHandler()

#创建请求管理器

opener = request.build_opener(http_handler,https_handler,cookie_handler)

def login():

'''

负责初次登录,需要输入用户名密码,用来获取登录cookie凭证

:return:

'''

#人人网登陆界面查看源码,

# url = "http://www.renren.com/PLogin.do"

data = {

"email":"",#输入用户名

"password":""#输入密码

}

#把数据进行编码

data = parse.urlencode(data)

#创建一个请求对象

req = request.Request(url,data=data.encode())

#使用opener发起请求

rsp = opener.open(req)

def getHomePage():

url = "http://www.renren.com/970362268"

#如果已经执行了login函数,则opener自动已经包含相应的cookie值

rsp = opener.open(url)

html = rsp.read().decode()

with open("rsq.html","w") as f:

f.write(html)

if __name__ == '__main__':

login()

getHomePage()

(4)handler是Handler的实例,常用有

#生成cookie的管理器

cookie_handler = request.HTTPCookieProcessor(cookie)

#创建http请求管理器

http_handler = request.HTTPHandler()

#生成https管理器

https_handler = request.HTTPSHandler()

-创立handler后使用opener打开,打开后相应的业务由相应的handler处理

-cookie作为一个变量打印出来

# 使用cookiejar

# cookie作为一个变量打印出来

from urllib import request,parse

from http import cookiejar

# 创建cookiejar的实例

cookie = cookiejar.CookieJar()

# 常见cookie的管理器

cookie_handler = request.HTTPCookieProcessor(cookie)

# 创建http请求的管理器

http_handler = request.HTTPHandler()

# 生成https管理器

https_handler = request.HTTPSHandler()

# 创建请求管理器

opener = request.build_opener(http_handler,https_handler,cookie_handler)

def login():

# 负责首次登录,输入用户名和密码,用来获取cookie

url = 'http://www.renren.com/PLogin.do'

id = input('请输入用户名:')

pw = input('请输入密码:')

data = {

# 参数使用正确的用户名密码

"email": id,

"password": pw

}

# 把数据进行编码

data = parse.urlencode(data)

# 创建一个请求对象

req = request.Request(url,data=data.encode('utf-8'))

# 使用opener发起请求

rsp = opener.open(req)

# 以上代码就可以进一步获取cookie了,cookie在哪呢?cookie在opener里

def getHomePage():

# 地址是用在浏览器登录后的个人信息页地址

url = "http://www.renren.com/970362268"

# 如果已经执行login函数,则opener自动已经包含cookie

rsp = opener.open(url)

html = rsp.read().decode()

with open("rsp1.html", "w", encoding="utf-8")as f:

# 将爬取的页面

print(html)

f.write(html)

if __name__ == '__main__':

login()

# 执行完login之后,会得到授权之后的cookie,下一步打印出来

print(cookie)

for item in cookie:

print(type(item))

print(item)

for i in dir(item):

print(i)

(5)cookie的属性

-name:名称

-value:值

-domain:可以访问此cookie的域名

-path:可以访问此cookie的页面路径

-expires:过期时间

-size:大小

-Http字段

(6)cookie的保存-FileCookieJar

from urllib import request,parse

from http import cookiejar

#创建filecookiejar的实例

filename = "cookie.txt"

cookie = cookiejar.MozillaCookieJar(filename)

#生成cookie的管理器

cookie_handler = request.HTTPCookieProcessor(cookie)

#创建http请求管理器

http_handler = request.HTTPHandler()

#生成https管理器

https_handler = request.HTTPSHandler()

#创建请求管理器

opener = request.build_opener(http_handler,https_handler,cookie_handler)

def login():

'''

负责初次登录,需要输入用户名密码,用来获取登录cookie凭证

:return:

'''

#人人网登陆界面查看源码,

# url = "http://www.renren.com/PLogin.do"

id = input("请输入用户名")

pd = input("请输入密码")

data = {

"email":id,#输入用户名

"password":pd#输入密码

}

#把数据进行编码

data = parse.urlencode(data)

#创建一个请求对象

req = request.Request(url,data=data.encode())

#使用opener发起请求

rsp = opener.open(req)

#保存cookie到文件

#ignore_discard表示即使cookie将要被丢弃也要保存下来

#ignore_expire表示如果该文件中cookie即使已经过期,保存

cookie.save(ignore_discard=True,ignore_expires=True)

if __name__ == '__main__':

login()

(7)cookie的读取

from urllib import request,parse

from http import cookiejar

#创建filecookiejar的实例

cookie = cookiejar.MozillaCookieJar()

cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)

#生成cookie的管理器

cookie_handler = request.HTTPCookieProcessor(cookie)

#创建http请求管理器

http_handler = request.HTTPHandler()

#生成https管理器

https_handler = request.HTTPSHandler()

#创建请求管理器

opener = request.build_opener(http_handler,https_handler,cookie_handler)

def getHomePage():

url = "http://www.renren.com/970362268"

#如果已经执行了login函数,则opener自动已经包含相应的cookie值

rsp = opener.open(url)

html = rsp.read().decode()

with open("rsq.html","w") as f:

f.write(html)

if __name__ == '__main__':

getHomePage()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值