python爬虫使用cookie登录详解
作者:__搁浅 发布时间:2023-10-13 06:36:39
前言:
什么是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的属性)
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/'
查看登录的request网址
2、查看要传送的post数据
找到登录后的request中有webforms的信息,会列出登录要用的post数据,包括Email,password,auth。
webforms信息
3、查看headers信息
找到登录后看到的request的headers信息,找出User-Agent设置、connection设置等
User-Agent设置、connection设置
4、开始编码,使用cookie登录该网站
5、反复使用cookie登录
(上面代码中我们保存cookie到本地了,以下代码我们能够直接从文件导入cookie进行登录,不用再构建request了)
来源:https://www.cnblogs.com/xiaoxi-3-/p/7586072.html
猜你喜欢
- 译序:这篇文章是可用性大师 Jakob Nielsen 在10年前总结的,到今天仍然受用。通过这个时间跨度,可以得出,可用性话题不是某个时代
- 1、子类可以继承父类,同样,父类也可以继承自己的父类,一层一层地继承。class A:def have(self):print('I
- 如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一
- 一、什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体
- 在Soundbreak我们每天24小时不间断地播放实况音频和视频,所以对于MySQL的新增的复制特性,我们不能做出很令人信服的测试。通过测试
- 本文实例讲述了Python创建xml文件的方法。分享给大家供大家参考,具体如下:这是一个使用ElementTree有关类库,生成xml文件的
- 如下所示:import matplotlib.pyplot as pltimport numpy as npfrom scipy impor
- isset和is_null啥区别,看手册上讲的话, isset和is_null的功能几乎完全”相反的一样”..是不是isset就是一个is_
- 本文实例讲述了python遍历类中所有成员的方法。分享给大家供大家参考。具体分析如下:这段代码自定义了一个类,类包含了两个成员title和u
- 引言:刚学python好几天了,从java到python,基础学起来确实比较容易,语法掌握,基本概念上都比较容易入脑。唯一比较郁闷的是老想着
- 科讯5.0 标签和之前版本变化不大,如果用老版本的科讯,可以参考这个标签使用。相关文章:新云4.0 模板通用标签说明 标签清单:======
- 一个网站空间,但是却可以实现多个域名的访问的一段ASP代码:<%if Request.ServerVariables("SE
- 1)利用eval可以将字典格式的字符串与字典户转》》》mstr = '{"name":"yct&quo
- 第一种,也是我最常用的,第一帧里加上这个比较灵活,想要自定义加入菜单,只要定义drMenu这个对象就可以了var drMenu&n
- 目录wsgi 相关概念CGIWSGIASGIcgi 示例cgi脚本cgi服务实现wsgirefwsgi 小结小技巧python web开发中
- 线性回归是基本的统计和机器学习技术之一。经济,计算机科学,社会科学等等学科中,无论是统计分析,或者是机器学习,还是科学计算,都有很大的机会需
- 几乎在学习、使用任何一种编程语言的时候,关于socket的练习从来都不会少,尤其是会写一些局域网的通信的东西。所以书上的这个项目刚好可以练习
- Celery是一个异步的任务队列(也叫做分布式任务队列),一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需
- 利用Pytest+Request+Allure+Jenkins实现接口自动化;实现一套脚本多套环境执行;利用参数化数据驱动模式,实现接口与测
- 1.cut()可以实现类似于对成绩进行优良统计的功能,来看代码示例。假如我们有一组学生成绩,我们需要将这些成绩分为不及格(0-59)、及格(