欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python爬虫之cookie的获取、保存和使用【新手必学】

程序员文章站 2022-06-07 11:28:50
前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:huhanghao Cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 比如说有些网站需要登录后才能访问某个页面 ......

前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
作者:huhanghao
Python爬虫之cookie的获取、保存和使用【新手必学】

cookie,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容,登陆前与登陆后是不同的,或者不允许的。另外如果你刚学不久。对这方面还不熟,建议先去小编的python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新python教程项目可拿,多跟里面的人交流,比自己摸索效率更高哦!

在python中它为我们提供了cookiejar模块,它位于http包中,用于对cookie的支持。通过它我们能捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有cookiejar、filecookiejar、mozillacookiejar、lwpcookiejar。

## cookie的获取

# -*- coding: utf-8 -*-
from urllib import request
from http import cookiejar

if __name__ == '__main__':
   #声明一个cookiejar对象实例来保存cookie
   cookie = cookiejar.cookiejar()
   #利用urllib.request库的httpcookieprocessor对象来创建cookie处理器,也就cookiehandler
   handler=request.httpcookieprocessor(cookie)
   #通过cookiehandler创建opener
   opener = request.build_opener(handler)
   #此处的open方法打开网页
   response = opener.open('http://www.baidu.com')
   #打印cookie信息
   for item in cookie:
       print('name = %s' % item.name)
       print('value = %s' % item.value)

cookie的文件保存
# -*- coding: utf-8 -*-
from urllib import request
from http import cookiejar

if __name__ == '__main__':

   #设置保存cookie的文件,同级目录下的cookie.txt
   filename = 'cookie.txt'
   #声明一个mozillacookiejar对象实例来保存cookie,之后写入文件
   cookie = cookiejar.mozillacookiejar(filename)
   #利用urllib.request库的httpcookieprocessor对象来创建cookie处理器,也就cookiehandler
   handler=request.httpcookieprocessor(cookie)
   #通过cookiehandler创建opener
   opener = request.build_opener(handler)
   #此处的open方法打开网页
   response = opener.open('http://www.baidu.com')
   #保存cookie到文件
   cookie.save(ignore_discard=true, ignore_expires=true)


加载保存的cookie,并进行网页访问
# -*- coding: utf-8 -*-
from urllib import request
from http import cookiejar

if __name__ == '__main__':
   #设置保存cookie的文件的文件名,相对路径,也就是同级目录下
   filename = 'cookie.txt'
   #创建mozillacookiejar实例对象
   cookie = cookiejar.mozillacookiejar()
   #从文件中读取cookie内容到变量
   cookie.load(filename, ignore_discard=true, ignore_expires=true)
   #利用urllib.request库的httpcookieprocessor对象来创建cookie处理器,也就cookiehandler
   handler=request.httpcookieprocessor(cookie)
   #通过cookiehandler创建opener
   opener = request.build_opener(handler)
   #此用opener的open方法打开网页
   response = opener.open('http://www.baidu.com')
   #打印信息
   print(response.read().decode('utf-8'))
这里对cookie的使用类似于,之前我们用到的对代理的使用。

加载cookie,实现网站的登录
# -*- coding: utf-8 -*-
from urllib import request
from urllib import error
from urllib import parse
from http import cookiejar

if __name__ == '__main__':
   #登陆地址
   login_url = 'http://www.jobbole.com/wp-admin/admin-ajax.php'    
   #user-agent信息                  
   user_agent = r'mozilla/5.0 (windows nt 6.2; wow64) applewebkit/537.36 (khtml, like gecko) chrome/27.0.1453.94 safari/537.36'
   #headers信息
   head = {'user-agnet': user_agent, 'connection': 'keep-alive'}
   #登陆form_data信息
   login_data = {}
   login_data['action'] = 'user_login'
   login_data['redirect_url'] = 'http://www.jobbole.com/'
   login_data['remember_me'] = '0'         #是否一个月内自动登陆
   login_data['user_login'] = '********'       #改成你自己的用户名
   login_data['user_pass'] = '********'        #改成你自己的密码
   #使用urlencode方法转换标准格式
   logingpostdata = parse.urlencode(login_data).encode('utf-8')
   #声明一个cookiejar对象实例来保存cookie
   cookie = cookiejar.cookiejar()
   #利用urllib.request库的httpcookieprocessor对象来创建cookie处理器,也就cookiehandler
   cookie_support = request.httpcookieprocessor(cookie)
   #通过cookiehandler创建opener
   opener = request.build_opener(cookie_support)
   #创建request对象
   req1 = request.request(url=login_url, data=logingpostdata, headers=head)

   #面向对象地址
   date_url = 'http://date.jobbole.com/wp-admin/admin-ajax.php'
   #面向对象
   date_data = {}
   date_data['action'] = 'get_date_contact'
   date_data['postid'] = '4128'
   #使用urlencode方法转换标准格式
   datepostdata = parse.urlencode(date_data).encode('utf-8')
   req2 = request.request(url=date_url, data=datepostdata, headers=head)
   try:
       #使用自己创建的opener的open方法
       response1 = opener.open(req1)
       response2 = opener.open(req2)
       html = response2.read().decode('utf-8')
       index = html.find('jb_contact_email')
       #打印查询结果
       print('联系邮箱:%s' % html[index+19:-2])

   except error.urlerror as e:
       if hasattr(e, 'code'):
           print("httperror:%d" % e.code)
       elif hasattr(e, 'reason'):
           print("urlerror:%s" % e.reason)
​以上就是本期讲的内容,另外如果你对这方面还不熟,刚学不久,建议先去小编的python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面有最新python教程项目可拿,多跟里面的人交流,比自己摸索效率更高哦!