python爬虫使用cookie登录详解


Posted in Python onDecember 27, 2017

前言:

什么是cookie?

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

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

一、Urllib库简介

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

包括以下模块:

>>>urllib.request请求模块

>>>urllib.error异常处理模块

>>>urllib.parseurl解析模块

>>>urllib.robotparserrobots.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://fr*****.aflt.kiwisns.com/postLogin/"

values={'email':'*******@user.com','password':'123456'}

data=urllib.parse.urlencode(values).encode()

geturl=LOGIN_URL+"?"+data

request=urllib.request.Request(geturl)

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

LOGIN_URL='http://fr*****.aflt.kiwisns.com/postLogin/'

values={'email':'*******@user.com','password':'123456'}

data=urllib.parse.urlencode(values).encode()

request=urllib.request.Request(URL,data)

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

python爬虫使用cookie登录详解

fiddler抓包请求-headers

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

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

user_agent=r'Mozilla/5.0(WindowsNT6.1;Win64;x64;rv:55.0)Gecko/20100101Firefox/55.0'

headers={'User-Agent':user_agent,'Connection':'keep-alive'}

request=urllib.request.Request(URL,data,headers)

四、使用cookie登录

1、获取登录网址

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

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

python爬虫使用cookie登录详解

查看登录的request网址

2、查看要传送的post数据

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

python爬虫使用cookie登录详解

webforms信息

3、查看headers信息

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

python爬虫使用cookie登录详解

User-Agent设置、connection设置

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

python爬虫使用cookie登录详解

5、反复使用cookie登录

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

python爬虫使用cookie登录详解

总结

以上就是本文关于python爬虫使用cookie登录详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python合并文本文件示例
Feb 07 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
Feb 04 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
树莓派+摄像头实现对移动物体的检测
Jun 22 Python
python hough变换检测直线的实现方法
Jul 12 Python
Django 拆分model和view的实现方法
Aug 16 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 Python
基于python调用jenkins-cli实现快速发布
Aug 14 Python
Python wordcloud库安装方法总结
Dec 31 Python
Python中的tkinter库简单案例详解
Jan 22 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 #Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 #Python
利用 python 对目录下的文件进行过滤删除
Dec 27 #Python
python中使用%与.format格式化文本方法解析
Dec 27 #Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 #Python
python中的迭代和可迭代对象代码示例
Dec 27 #Python
python并发编程之线程实例解析
Dec 27 #Python
You might like
谈谈新手如何学习PHP
2006/12/23 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
组合算法的PHP解答方法
2012/02/04 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
php精度计算的问题解析
2019/06/21 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
Django 路由控制的实现代码
2018/11/08 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
详解Scrapy Redis入门实战
2020/11/18 Python
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
军训拉歌口号
2014/06/13 职场文书
未婚证明书模板
2014/10/08 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
领导离职感言
2015/08/03 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
导游词之凤凰古城
2019/10/22 职场文书
数据库连接池
2021/04/06 MySQL
Python包argparse模块常用方法
2021/06/04 Python
Tomcat弱口令复现及利用
2022/05/06 Servers
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技