前言:

什么是cookie?

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

比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的。那么我们可以利用Urllib库保存我们登录的Cookie,然后再抓取其他页面,这样就达到了我们的目的。


一、Urllib库简介

Urllib是python内置的HTTP请求库,官方地址:https://docs.python.org/3/library/urllib.html

包括以下模块:

>>>urllib.request 请求模块>>>urllib.error 异常处理模块>>>urllib.parse url解析模块>>>urllib.robotparser robots.txt解析模块


二、urllib.request.urlopen介绍

uurlopen一般常用的有三个参数,它的参数如下:

urllib.requeset.urlopen(url,data,timeout)

简单的例子:

1、url参数的使用(请求的URL)

response = urllib.request.urlopen('http://www.baidu.com')

2、data参数的使用(以post请求方式请求)

data= bytes(urllib.parse.urlencode({'word':'hello'}), encoding='utf8')response= urllib.request.urlopen('http://www.baidu.com/post', data=data)

3、timeout参数的使用(请求设置一个超时时间,而不是让程序一直在等待结果)

response= urllib.request.urlopen('http://www.baidu.com/get', timeout=4)


三、构造Requset

1、数据传送POST和GET(举例说明:此处列举登录的请求,定义一个字典为values,参数为:email和password,然后利用urllib.parse.urlencode方法将字典编码,命名为data,构建request时传入两个参数:url、data。运行程序,即可实现登陆。)

GET方式:直接以链接形式访问,链接中包含了所有的参数。

LOGIN_URL= "http://*******.kiwisns.com/postLogin/"values={'email':'*******@user.com','password':'123456'}data=urllib.parse.urlencode(values).encode()geturl = LOGIN_URL+ "?"+datarequest = urllib.request.Request(geturl)

POST方式:上面说的data参数就是用在这里的,我们传送的数据就是这个参数data。

LOGIN_URL='http://*******.kiwisns.com/postLogin/'values={'email':'*******@user.com','password':'123456'}data=urllib.parse.urlencode(values).encode()request=urllib.request.Request(URL,data)

2、设置Headers(有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性)

上图可以看到该请求的headers,这个头中包含了许多信息:Cache、Client、Transport等等。其中,agent就是请求的身份,如果没有写入请求身份,那么服务器不一定会响应,所以可以在headers中设置agent。

举例:(这个例子只是说明了怎样设置headers)

user_agent = r'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0'headers={'User-Agent':user_agent,'Connection':'keep-alive'}request=urllib.request.Request(URL,data,headers)


四、使用cookie登录

1、获取登录网址

浏览器输入需要登录的网址:'http://******.kiwisns.com/login'(注意:这个并非其真实站点登录网址),使用抓包工具fiddler抓包(其他工具也可)找到登录后看到的request。

此处确定需要登录的网址为:'http://******.kiwisns.com/postLogin/'

2、查看要传送的post数据

找到登录后的request中有webforms的信息,会列出登录要用的post数据,包括Email,password,auth。

3、查看headers信息

找到登录后看到的request的headers信息,找出User-Agent设置、connection设置等

4、开始编码,使用cookie登录该网站

import urllib.error, urllib.request, urllib.parse
import http.cookiejarLOGIN_URL = 'http://******.kiwisns.com/postLogin'
#get_url为使用cookie所登陆的网址,该网址必须先登录才可
get_url = 'https://******.kiwisns.com/admin/affiliate/pending'
values = {'email':'******@user.com','password':'123456','auth':'admin'}
postdata = urllib.parse.urlencode(values).encode()
user_agent = r'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36' \r' (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36'
headers = {'User-Agent':user_agent, 'Connection':'keep-alive'}
#将cookie保存在本地,并命名为cookie.txt
cookie_filename = 'cookie.txt'
cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)
handler = urllib.request.HTTPCookieProcessor(cookie_aff)
opener = urllib.request.build_opener(handler)request = urllib.request.Request(LOGIN_URL, postdata, headers)
try:response = opener.open(request)
except urllib.error.URLError as e:print(e.reason)cookie_aff.save(ignore_discard=True, ignore_expires=True)for item in cookie_aff:print('Name ='+ item.name)print('Value ='+ item.value)
#使用cookie登陆get_url
get_request = urllib.request.Request(get_url,headers=headers)
get_response = opener.open(get_request)
print(get_response.read().decode())

5、反复使用cookie登录

(上面代码中我们保存cookie到本地了,以下代码我们能够直接从文件导入cookie进行登录,不用再构建request了)

import urllib.request, urllib.parse
import http.cookiejarget_url = 'https://******.kiwisns.com/admin/affiliate/pending'
cookie_filename = 'cookie.txt'
cookie_aff = http.cookiejar.MozillaCookieJar(cookie_filename)
cookie_aff.load(cookie_filename,ignore_discard=True,ignore_expires=True)handler = urllib.request.HTTPCookieProcessor(cookie_aff)
opener = urllib.request.build_opener(handler)
#使用cookie登陆get_url
get_request = urllib.request.Request(get_url)
get_response = opener.open(get_request)
print(get_response.read().decode())


以上

作者:搁浅
出处: http://www.cnblogs.com/xiaoxi-3-/
如果对您有帮助,请关注我的同名简书:https://www.jianshu.com/u/da1677475c27
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

python爬虫-使用cookie登录相关推荐

  1. Python爬虫进行Cookie登录

    不太喜欢说废话,直接开始. 一.首先找到发送登录请求(post或get)的url: 可以用抓包工具来进行捕捉,我用的工具是fiddler.fidder的安装及使用方法大家自行百度.这里假设大家已经安装 ...

  2. python获取登录后的cookie_python爬虫使用cookie登录详解

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  3. Python爬虫--人人网模拟登录cookie(四)

    文章目录 模拟登录 一.人人网模拟登录 1.1 验证码识别 1.2 发送post请求 1.3 模拟登录cooki操作 1.4 cookie 1. 手动cookie处理 2. 自动处理 二.代理讲解 总 ...

  4. python爬虫分析模拟登录时会变的参数_Python爬虫之urllib模拟登录及cookie的那点事...

    在web  sprider crawl过程中,许多网站都需要登录后才能访问,一般如果我们不用爬虫框架的前提下,常规用的就两个库 ,urllib库和requests库,本文将用最基础的urllib库,以 ...

  5. 利用python爬虫(part15)--cookie模拟登陆

    学习笔记 文章目录 cookie模拟登陆 获取cookie 爬取我的简介 cookie模拟登陆 有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录 ...

  6. python爬虫淘宝登录_python爬虫实现模拟淘宝登录

    就算所有人都不支持你.这条路会很曲折,你也会一度认为是不是自己选错了,但只要坚持,就算最后没有成功,但努力了就不会有遗憾. python爬虫模拟淘宝登录 小贴士 这个爬虫和搜索引擎的爬虫是有区别的.搜 ...

  7. python爬虫淘宝登录_淘宝的模拟登录(python3+selenium)

    淘宝登录 爬数据的前提是要先登录,那么先来说怎么使用python3+selenium登录淘宝的. 一.登录前的准备工作 关于一开始做登录时,一直会出现滑块,这个滑块怎么滑都通过不了,后来才知道是淘宝有 ...

  8. python爬虫之cookie方式自动登录巴比特网

    最近打算抓取公司内部PPT模板库中的PPT,发现被各种安全屏蔽.因为好久没写程序了,因此写几个例子回顾下基本的爬虫知识 目标网址巴比特的登录页面 http://8btc.com/member.php? ...

  9. Python爬虫10-Selenium模拟登录

    目录 10.1Selenium和PhantomJS和headless-chrome 10.1.1Selenium的概念和安装 10.1.2浏览器的选择和安装 10.2Selenium和PhantomJ ...

最新文章

  1. python用户登录程序_「Python」每日一练:函数的应用之注册登录程序
  2. 201521123028 《Java程序设计》第5周学习总结
  3. js系列教程1-数组操作全解
  4. android开机图片格式,Android平台启动图使用.9.png图片
  5. CodeVS 1220 数字三角形
  6. C语言:计算1*2*3*....*100,即求100!。
  7. STM8S与IAR程序常用错误
  8. Linux字符设备驱动内幕
  9. 换热站实际应用程序:西门子200smart PLC与威纶通触摸屏换热站程序
  10. RS485/RS232通信协议
  11. 软件工程的知识思维导图
  12. amr转换成mp3 java_微信开发-将amr格式转换为mp3格式
  13. Misra c规则简介
  14. jsp里table边框线_JSP好看表格边框
  15. SharePoint - CAML
  16. 用正则表达式验证邮箱、密码、QQ号、手机号、身份证号
  17. java eclipse改名_Java EE更名Jakarta EE,但Oracle还给Eclipse基金会提了很多要求 - IT之家...
  18. 极客日报:iPhone 13或有8款配色;vivo百万年薪招工程师;特斯拉新增行车记录视频紧急情况自动保存功能
  19. 什么是MES生产管理和生产制造执行系统?有哪些系统模块组成?
  20. Ubuntu设置终端打开时的默认窗口大小和位置坐标

热门文章

  1. VR线上展会对比线下展会的优势,打破时空束缚
  2. 从生日悖论谈哈希碰撞
  3. 使用 github pages, 快速部署你的静态网页
  4. 小白教程----python(保姆级教程)
  5. golang 注释规范
  6. 手游平台游戏源码为什么要选择PHP作为后端语言
  7. 原路退回的快递怎么查询
  8. [翻译]-WinCE 程序设计 (3rd 版)--2.3 位图
  9. 电源滤波电容的选取和选择
  10. 位置式PID与增量式PID