爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

不温卜火 等级 667 0 0

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!

目录


爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!


推荐

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

  ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
通过前两天的小demo,大家是不是对Spider有了进一步的了解。是不是感觉通过短短几行代码就能够获取并保存我们想要保存的内容就很神奇,其实这些都没什么。总之,紧跟博主步伐就🆗了 -。-

当我们真正开始数据采集的操作之后,我们遇到的第一个问题就是,如何获取登录窗口背后的数据
许多网站的内容是需要登录之后才能抓取的,如微博,百度云盘,知乎等。这些网站只有登录之后才能看到想要的信息。

  • 对于需要登录的网站,网站和用户都不希望每打开一个新网页就要重新登录以下,所以这就需要记录用户的登录状态信息
  • 大多数的新式网站都用Cookie跟踪用户是否已登录的状态信息
  • 网站通过验证用户的的登录权证,会将其保存在用户浏览器的Cookie中

登录权限包含什么?
1、服务器生成的令牌
2、登录有效时限
3、状态跟踪信息

  • 由于HTTP本身是无状态的,服务器需要利用Cookie保存登录信息
  • 模拟登录是在每次发送请求时在请求的header中带上Cookie
  • 网站会将这些Cookie作为信息验证的证据,在浏览网站的每个网页时出示给服务器

一、Cookie的简单解释

1、什么是Cookie

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据(通常经过加密)。
Cookie是小量信息,是由Web服务器创建的,将信息存放在用户计算机的文件上
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

通过上述页面我们可以看到,登陆上去会有提示。

  • 由于HTTP是一种无状态的协议,服务器但从网络连接上不能知道客户身份。如果想要知道客户身份,这是就需要一张通行证,每人一个,无论谁访问都必须携带自己的通行证。这样服务器就能通过通行证来确定客户身份,这就是Cookie的工作原理。
    爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

上述返回200代表成功访问,这是为什么呢?因为我们添加了Cookie

2、Cookie的响应过程

  1. 客户端发送一个http请求到服务器端,如果是登录操作则携带我们的用户名和密码。
  2. 服务器端验证后发送一个http响应到客户端,其中包含Set-Cookie头部。
  3. 客户端发送一个http请求到服务器端,其中包含Cookie。
  4. 服务器端发送一个http响应到客户端。
    爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

一个简单的Cookie
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

3、Cookie的核心内容

  • String name:该Cookie的名称。Cookie一旦创建,名称不可更改
  • Object value:Cookie的值
  • int maxAge:Cookie失效时间,单位为秒
  • boolean secure:该Cookie是否仅被使用含权协议传输
  • String path:Cookie的使用路径
  • String domain:可以访问该Cookie的域名
  • String comment:Cookie的使用说明
  • int version:该Cookie使用的版本号

4、DevTools(开发人员工具)

Chrome DevTools是Chrome浏览器自带的开发人员工具,我们检测网络流量要用到的是其中的Network面板
默认情况下,只要DevTools在开启状态,DevTools会记录所有的网络请求,记录都是在Network中展示出来

  • 1、打开方式

  • 在浏览器内:右键->审查元素
    对应快捷键:ctrl+shift+c

  • 点击浏览器右上角设置->工具->开发者工具
    对应快捷键:ctrl+shift+i或F12

  • 直接使用快捷键
    ctrl+shift+j打开控制台(console面板)

  • 2、通过开发人员工具查看各种信息

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

上述的过程都是建立在登录有Cookie的前提下才能进行访问查看,如果没有登录则不能查看及操作。

Cookie这方面博主就介绍到这里,如果想看剩下的可以看博主以往的博文。传送门——> 快速入门网络爬虫系列 Chapter13 | 模拟登陆

二、过程分析

我们知道有些网站登陆之后才可以显示需要的数据。这里需要了解web中的cookiesession

cookie是保存在浏览器客户端的,session是保存在服务器端的,session依赖于cookie实现。当访问对应网站的时候cookie是再次发回当前网站对应的服务器。cookiesession都是有有效期的。

这个时候我们需要看下下图:
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
当我们添加cookie之后,相当于模拟了我们登录账号。这个时候就可以直接进入登录之后的界面
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

至于cookie和session时效性: cookie:一般默认为14天。 session:如果没有特殊情况,半个小时

模拟登录的分析就这么多,那么接下来就可以来实现了。

三、代码实现

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
通过上图分析我们可以知道
Github的GET网址为:https://github.com/login
Github的POST网址为:https://github.com/session

3.1 手动加入cookie

import requests

url = "https://github.com/session"
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    # 加入需要的cookie表示已经登陆了
    "cookie": "_octo=GH1.1.332975439.1600306176; _ga=GA1.2.1383224642.1600306188; _device_id=b3fc5e59ed4944773db74bbfa4adafe8; has_recent_activity=1; tz=Asia%2FShanghai; tz=Asia%2FShanghai; _gat=1; logged_in=no; _gh_sess=F6769fV4FjQ9Fn%2FbXDdVeQZvq%2FxCRmVcXlS7FO3jaPp6XtEXoiqI35eogYuKa85J5gQ2LBNFK79qmJH6OTCU2U97IJHb0WanI7%2FnCe35CWsEo5D3OzQxJLeXfqm5DleVEsLcj7WzOKZngfoW30tHxPmMzcWFHO%2FwyfFhFL4w6IPdQ8tY4gg8Y4M4ugCf1sAdMSJhxwWuPFBExpfvLPVOgX4a%2FtHaVXMYUmYEdx76C512wuRiND%2FR9Yjcxz0w%2BEKzJ%2Bc6yY6hvwAUKAkLAVjVew%3D%3D--tnXOGubdyTAls3fX--TTHuSWdAkG%2Bgl%2BA9I%2B9fiw%3D%3D",
}
response = requests.get(url=url, headers=headers)
print(response)
print(response.content.decode("utf-8"))
print(response.status_code) 

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
通过上图,我们可以看到<Response [200]>代表登录成功。至于是不是成功呢?我们可以查看以下
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
通过查找对比,我们发现登录成功。

3.2 修改完善

    1. 分析

上述代码只能通过复制cookie来模拟登录,那么能不能智能些呢?

答案是肯定的。我们可以通过获取authenticity_token,并输入账号密码进行登录。

为什么直接就说需要这三个呢? 看下图:
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
上图为所有的parms,经过测试,只需要最少三个即可完成登录,那就是authenticity_tokenloginpassword

    1. 实现

想要实现,我们需要先获取authenticity_token,我们先来看网页
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
我们很容易就看到了authenticity_token,找到了,接下来的提取就很简单了,我们通过正则进行提取

#获取token
authenticity_token = re.findall(r'name="authenticity_token" value="(.*?)"',content)[0] 
    1. 完整代码
# encoding: utf-8
'''
  @author 李华鑫
  @create 2020-10-06 14:57
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: requests中的session.py
  @Version:1.0

'''
import requests
import re

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}
url_login = "https://github.com/login"
url_login_action = "https://github.com/session"
# url_profile = "https://github.com/settings/profile"
# 创建session对象
session = requests.session()
# 使用session发送请求,对应的响应中的cookie会自动保存到sesison对象中
response = session.get(url=url_login, headers=headers)
print("cookie:", response.cookies)
#获取响应内容
content = response.content.decode("utf-8")
#获取token
authenticity_token = re.findall(r'name="authenticity_token" value="(.*?)"',content)[0]
print(authenticity_token)
# 准备参数
data = {
    "authenticity_token": authenticity_token,
    "login": input("用户名:"),
    "password":input("密码:"),
}
# 使用session发送请求,上次存储的当前网站的cookie会自动发送过去
response2 = session.post(url=url_login_action, headers=headers, data=data)
#获取响应内容
print(response2.content.decode("utf-8")) 
    1. 运行结果

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

  • 5.对比查看是否成功
    爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
    🆗,完工!

美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!

本文转自 https://buwenbuhuo.blog.csdn.net/article/details/109035864,如有侵权,请联系删除。

收藏
评论区

相关推荐

爬虫入门经典(三) | 模拟登录?一文为你排忧解惑!
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
python算法
640?wx_fmtjpeg(https://imghelloworld.osscnbeijing.aliyuncs.com/c8238ed70f9664b61ce91f80786ca26f.png) 来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集。 其主要特点有以下
Java面试真题解析火爆全网,讲的太透彻了
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
BAT这种大厂履历意味着什么?面试篇
8.15 一面 (60min) 自我介绍,为什么投客户端 python和java有什么区别 java内存模型 gc讲讲 http https区别 cookie,session https握手过程 对称非对称加密算法?哪个效率高? tcp握手要三次,挥手要几次,为什么 进程和线程,描述一下 进程通信方式 线程同步
Django sessions 详解
所谓cookie其实就是有服务器端发送到客户端的属性字符串,然后客户端再返回给服务器端。它里面包含了一些用户的基本信息。cookie中的信息对客户端是不透名的,它只在服务器端使用。 下面,我们来看看在Django中使用cookie。 首先来看看在python中使用cookie --------------------- > from BaseHTTPS
Django中cookie和session
cookie和session -------------- **Cookie`可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 .xx,`Cookie`其实是客户端记录用户行为的一个文件,形式通常是键值对的方式,大家可能有过这种经历,登录网站有的浏览器会提示,是否保存`Cooki
Django之cookie 和 session
一、 1、cookie的由来!!!     由于HTTP协议是无状态的,既每一次的请求都是独立的,他不会因为你之前来过,就记住你,所以每次浏览器去访问服务器的时候,都是一个全新的过程,之前的数据也不会保留,所以为了解决这个问题,cookie诞生了。 2、什么是cookie?     Cookie具体指的是一段小信息,他是服务器发送出来存储在浏览器一组
Hadoop streaming使用自定义python版本和第三方库
在使用Hadoop的过程中,遇到了自带python版本比较老的问题. 下面以python3.7为例,演示如何在hadoop上使用自定义的python版本以及第三方库. 1.在https://www.python.org下载Python-3.7.2.gz包 2.在linux环境下: tar -xvf Pthon-3.7.2 #解压文件
JS实现cookie的CRUD(需要注意path)
其实也没太大难度,主要注意设置cookie的时候需要统一path,因为现在很多pathinfo模式的url,会导致path不统一,你在 www.domain.com/foo 路径下设置的cookie在www.domain.com/bar下可能会读取不到,因为path可能不同,默认 / 最好 //增加或者更新cookie function s
Linux 安装python 模块及库
转载于[https://blog.csdn.net/csdn\_am/article/details/79924744](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Fcsdn_am%2Farticle%2Fdetails%2F79924744) 有时我们
OpenCv 014
**1 前备知识** 图像在进行几何变换、透视变换等场景时需要插值计算新像素的像素值。 [图像处理之三种常见双立方插值算法 - CSDN博客](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Fjia20003%2Farticle%2Fdetails%2F4
Python Requests 的一些高级特性
原文链接: [Python Requests 的一些高级特性](https://my.oschina.net/ahaoboy/blog/1608447) 会话对象 ---- 会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 `urllib3` 的 [connection poolin
Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
转载请注明作者和出处: https://zhuanlan.zhihu.com/ml-jack 机器学习知乎专栏:https://zhuanlan.zhihu.com/ml-jack CSDN博客专栏:http://blog.csdn.net/column/details/16415.html Github代码获取:https://github.c
Python能用来做什么?以下是Python的三大主要用途
![](https://oscimg.oschina.net/oscnet/2a77edbf-a777-4334-8fec-9927208d6473.gif) ![](https://oscimg.oschina.net/oscnet/56f08a00-6fe1-475a-b0ba-90c59984d4e1.jpg) 作者  YK Sugi 编译  M
Python进阶系列:Python遍历的秘密
![](https://oscimg.oschina.net/oscnet/1c11c4f0-4887-4b8d-929e-10ec7fcf4cfe.gif)  前言  可迭代对象,迭代器,生成器,相信许多学习Python的小伙伴或多或少都听说过,但你真的知道他们的区别吗?真的知道为什么需要这些概念吗? 本文带你深入了解一系列相