当我们访问一个网站,输入账号密码进入网页之后,再点击网页中的其他链接,跳转到另一个网页时,浏览器并不要求我们重新再输入一次账号密码,这是为什么呢?

原因是,当我们第一次输入账号密码后,服务器会返回给我们一个 Cookie 值,而之后再返回该网页的其它跳转网页时,客户端会将该 Cookie 值绑在请求上,发送给服务器,这样服务器就可以利用 Cookie 来判别我们是哪一个用户,找到会话,然后判别登陆状态,若状态为登陆,则不需要用户重新输入用户名密码来进行登陆。

这次我们需要做的就是利用 Python 进行模拟登陆,实现跨页面访问而不需要重新输入用户名及密码。

1. 首先,分析登陆页面

打开登陆页面:https://www.github.com/login

img01

打开开发者工具,分析请求,找到对应的请求头,用以构建爬虫的请求头。

img02

一般使用Host和User-Agent两个参数即可伪装成浏览器;构建请求头如下:

这里存在一个问题:使用 Chrome 的 User-Agent 来获取源码中的 token 值时,返回的列表为空;而使用火狐浏览器的 User-Agent 时,返回的列表是我们想要的内容。这里可以发现,服务器对不同 User-Agent 的返回值是不同的,至于为什么?还需要进一步探索。

2. 接着,分析点击登陆之后的页面

我们在登陆之后,访问其它页面,客户端发送给服务器 Cookie 值和表单,在服务器端找到会话,进而继续访问;所以我们模拟登陆需要的是模拟 Cookie(request.Session()函数)和表单。

Step1: 查看cookie

img03

发现第一次登陆后,响应头会返回 Set-Cookie 值,即设置 Cookie 返回给客户端,创建一个会话 session。

Step2: 分析登陆后页面的请求头

img04

发现其与登陆页面的请求头是一致的,所以我们在请求登陆页面和 github 个人详情页面时,可以使用同一个请求头。

Step3: 分析登陆后页面的 Form-Data (浏览器发送给服务器的表单)

Form-Data 体中含有用户名和密码,是客户端给服务器发送的表单信息,利用这些信息,可判断是在哪个会话中。

img05

发现其中:

commit、utf8 其属性的值每次访问都是不变的

login、password 的值分别是我们登陆所用的账户名和密码

而 authenticity-token 每次访问登陆时,其值都是变化的,我们无法人为输入,需要从源中获得;发现它藏在登陆页面的源码中

这里介绍一个快速查找源码中关键字的方法:

img06

在该界面中选中之后,按Ctrl+F,在箭头执行的输入框内输入我们想要查找的关键字,即可得到结果。

Step4: 获取 authenticity_token 的值

获取xpath:

img07

非常方便!

解析源码,获取 authenticity_token 的值:这里我们用到 lxml 里的 etree 模块,即利用 xpath 来获取信息。

代码如下:

Step5: 构建 form-data 头

3. 全部代码如下

是不是很有趣,好了今天就到这里吧!See You!

本篇图文由团队郭维强同学提供,他的 CSDN Blog 地址为:

参考图文

经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。

欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。

团队寻求论文合作,我们可以辅助对方构建模型,验证算法。

团队寻求项目合作,我们可以辅助对方搭建软件系统。

python怎么读取github_如何通过Python模拟登陆Github?相关推荐

  1. python github登陆_用Python模拟登陆GitHub并获取信息

    最近在研究如何对搜狗搜索公众号文章进行爬取,由于需要用到Cookies,所以这回先了解下Cookies的相关知识. 搜狗的反爬有点厉害,即使我用了高匿代理,它还是会提醒我IP访问过于频繁,然后跳转验证 ...

  2. python模拟登陆 验证码el_python 模拟登陆github的示例

    # -*- coding: utf-8 -*- # @Author: CriseLYJ # @Date: 2020-08-14 12:13:11 import re import requests c ...

  3. python批量读取csv文件-使用Python读写csv文件的三种方法

    行之间无空行十分重要,如果有空行或者数据集中行末有空格,读取数据时一般会出错,引发[list index out of range]错误.PS:已经被这个错误坑过很多次! 使用python I/O写入 ...

  4. float在python_如何在python中读取.float文件? - python

    Improve this question 我正在处理大脑MRI数据,它是.float数据. 您知道如何在python中使用它吗? 与 with open('[43x25520].float') as ...

  5. Python爬虫教程:requests模拟登陆github

    1. Cookie 介绍 HTTP 协议是无状态的.因此,若不借助其他手段,远程的服务器就无法知道以前和客户端做了哪些通信.Cookie 就是「其他手段」之一. Cookie 一个典型的应用场景,就是 ...

  6. python怎么读取csv文件-使用Python读写csv文件的三种方法

    行之间无空行十分重要,如果有空行或者数据集中行末有空格,读取数据时一般会出错,引发[list index out of range]错误.PS:已经被这个错误坑过很多次! 使用python I/O写入 ...

  7. python实用脚本 知乎_Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的文章,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  8. python怎么登录微博并发微博_Python模拟登陆万能法-微博|知乎

    Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...

  9. python爬虫怎么登录_Python爬虫基础-模拟登陆

    为什么我们要让爬虫模拟登陆呢?有些内容只有登陆才能进行爬取,如知乎,不登录的主页只能看到注册和登陆 : 你想爬取自己的个人信息 有什么方法呢?cookie 在互联网发展的早期,由于大家的服务器都不是太 ...

最新文章

  1. Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法
  2. php fpm.conf 注释,使用sed处理php-fpm.conf和nginx.conf文本里的注释信息
  3. 春天尚远,体育场馆预定平台距离成功彼岸还有多远?
  4. 【LeetCode】191. Number of 1 Bits
  5. linux原有的文件系统扩展,原来linux不用LVM也能扩展文件系统
  6. html nthchild作用,需要对HTML,nth-child进行一些解释
  7. [JoyOI] 1035 棋盘覆盖 (二分图匹配)
  8. 华为荣耀v8计算机没了,华为荣耀V8真机实测 没了徕卡到底咋样?
  9. 湖北省月降水量分布数据
  10. bootstraptable 一条数据跨行_据说它是唐山市拥有奶茶店最多的一条街,你一定也逛过!...
  11. 固态硬盘系统经常假死_使用固态硬盘装Win10经常假死怎么解决
  12. layui模板语言,渲染表格分组合并行
  13. 计算机打字测速,电脑的打字测速软件分享
  14. 姓谢起名:温柔贤惠、好听到爆的谢姓女孩名字
  15. Ubuntu下安装Python的Tkinter和Pmw库
  16. 手绘与码绘的比较---模拟风吹树动
  17. python将学号与成绩匹配_python输入学号输出成绩等级_python将百分制成绩转换为等级制输出...
  18. 如何在组装或维修计算机时避免静电,组装电脑怎么避免手上的静电
  19. 牛客编程巅峰赛S1第3场 - 黄金钻石 A.简单题 B.dfs C.并查集
  20. 图割论文阅读笔记:“GrabCut” — Interactive Foreground Extraction using Iterated Graph Cuts

热门文章

  1. 一个简单的状态机设计
  2. css3价格斜切_HTML5+CSS3价格表翻转切换动画
  3. 制作不同方向的三角形(border属性)
  4. python基础元组和列表区别(六)
  5. idea下如何正确导入多个module
  6. cicd持续集成全程_CICD-持续集成amp;持续交付
  7. 【Unity开源项目精选】Entitas:Unity DOTS的先行者
  8. git pull git add git commit git branch git更新代码git提交git分支管理
  9. .net core精彩实例分享 -- 依赖注入和中间件
  10. Newtonsoft 六个超简单又实用的特性,值得一试 【上篇】