Python 通过爬虫实现GitHub网页的模拟登录的示例代码


Posted in Python onAugust 17, 2020

1. 实例描述

通过爬虫获取网页的信息时,有时需要登录网页后才可以获取网页中的可用数据,例如获取 GitHub 网页中的注册号码时,就需要先登录账号才能在登录后的页面中看到该信息,如下图所示。那么该如何实现模拟登录的功能呢?本文实现将通过爬虫实现 GitHub 网页的模拟登录。

Python 通过爬虫实现GitHub网页的模拟登录的示例代码

2. 代码实现

在实现 GitHub 网页的模拟登录时,首先需要查看提交登录请求时都要哪些请求参数,然后获取登录请求的所有参数,再发送登录请求。如果登录成功的情况下获取页面中的注册号码信息即可。具体步骤如下:

(1) 点击 此处 打开 GitHub 的登录页面,然后输入账号与密码,如下图所示。

Python 通过爬虫实现GitHub网页的模拟登录的示例代码

(2) 用 F12 或者 鼠标右键单击网页选择 检查 打开浏览器的开发者工具,选择获取网络请求过程,然后单击登录页面中的 Sign in 按钮,此时开发者工具中将显示 GitHub 网页的登录请求过程,重点查找名称为 session 的网络请求。如下图所示。

Python 通过爬虫实现GitHub网页的模拟登录的示例代码

(3) 单击名称为 session 的网络请求,然后在 Headers 请求信息中主要查看 Request HeadersForm Data 中的各种信息,其中红框内为重要参数与数据。如下图所示。

Python 通过爬虫实现GitHub网页的模拟登录的示例代码

说明:Host 为主页面地址,Referer 为当前请求的来源地址。User-Agent 为浏览器的头部信息。Form Data 中的所有信息都是登录请求的所用参数,其中动态参数为重要参数,authenticity_token 为加密字符串,login 为登录的账号,password 为密码,其它参数为静态参数。由于动态参数只有 authenticity_tokenlogin 以及password ,而用户名与密码只需要将动态字符串填写对应的位置即可,所以接下来需要获取 authenticity_token 参数所对应的加密字符串。

(4) 在浏览器中退出所登录的 GitHub 账号,返回 GitHub 的登录页面,打开浏览器开发者工具,查看网页的 html 代码,然后在代码中搜索 authenticity_token 关键词,标签内 value 所对应的值为 authenticity_token 参数的加密字符串。如下图所示。

Python 通过爬虫实现GitHub网页的模拟登录的示例代码

(5) 实现爬虫代码,首先导入所需模块,然后创建头部信息,再通过 Session 会话对象发送网络请求获取 authenticity_token 信息,最后通过所有的登陆请求参数实现 GitHub 网页的登陆请求并提取注册号码。具体代码如下:

# -*- coding: utf-8 -*-
# @Time  : 2020/5/10 23:25
# @Author : 我就是任性-Amo
# @FileName: 77.通过爬虫实现GitHub网页的模拟登录.py
# @Software: PyCharm
# @Blog  :https://blog.csdn.net/xw1680

import requests # 导入网络请求模块
from lxml import etree # 导入数据解析模块 都是第三方模块需要安装 
# pip install requests/lxml如果太慢 可以加上镜像服务器 或者在Pycharm中使用图形化界面进行安装


class GitHubLogin(object):
  def __init__(self, username, password):
    # 构造头部信息
    self.headers = {
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) "
             "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
      "Host": "github.com",
      "Referer": "https://github.com/login"
    }
    self.login_url = "https://github.com/login" # 登录页面地址
    self.post_url = "https://github.com/session" # 实现登录的请求地址
    self.session = requests.Session() # 创建Session会话对象
    self.user_name = username # 用户名
    self.password = password # 密码

  # 获取authenticity_token信息
  def get_token(self):
    # 发送登录页面的网络请求
    response = self.session.get(self.login_url, headers=self.headers)
    if response.status_code == 200: # 判断请求是否成功
      html = etree.HTML(response.text) # 解析html
      # 提取authenticity_token信息
      token = html.xpath("//div[@id='login']/form/input[1]/@value")[0]
      # print(token) 测试是否能够获取到token
    return token # 返回信息

  # 实现登录
  def login(self):
    # 请求参数
    post_data = {
      "commit": "Sign in",
      "authenticity_token": self.get_token(),
      "login": self.user_name,
      "password": self.password,
      "webauthn - support": "supported"
    }
    # 发送登录请求
    response = self.session.post(self.post_url, headers=self.headers, data=post_data)
    if response.status_code == 200: # 判断请求是否成功
      html = etree.HTML(response.text) # 解析html
      # 获取注册号码
      register_number = html.xpath("//div[contains(@class,'Header-item')][last()]//strong")[0]
      print(f"注册号码为: {register_number.text}")
    else:
      print("登录失败")


if __name__ == '__main__':
  user_name = input("请输入您的用户名:") # 获取输入的用户名
  password = input("请输入您的密码:") # 获取输入的密码
  login = GitHubLogin(user_name, password) # 创建登录类对象并传递输入的用户名与密码
  login.login()

执行以上代码,输入用户名与密码,即可显示获取的注册号码。如下图所示:

Python 通过爬虫实现GitHub网页的模拟登录的示例代码

到此这篇关于Python 通过爬虫实现GitHub网页的模拟登录的示例代码的文章就介绍到这了,更多相关Python GitHub模拟登录内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
学习python (1)
Oct 31 Python
python 输出一个两行字符的变量
Feb 05 Python
机器学习python实战之决策树
Nov 01 Python
Django 路由控制的实现代码
Nov 08 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
wxPython多个窗口的基本结构
Nov 19 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
Python使用Excel将数据写入多个sheet
May 16 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
python pillow库的基础使用教程
Jan 13 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 #Python
用Python制作mini翻译器的实现示例
Aug 17 #Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 #Python
pandas apply多线程实现代码
Aug 17 #Python
简述python Scrapy框架
Aug 17 #Python
python使用多线程查询数据库的实现示例
Aug 17 #Python
python使用建议与技巧分享(一)
Aug 17 #Python
You might like
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
js修改input的type属性问题探讨
2013/10/12 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
微信小程序wxs实现吸顶效果
2020/01/08 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python变量访问权限控制详解
2019/06/29 Python
python实现单机五子棋
2020/08/28 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
计算机专业推荐信范文
2013/11/27 职场文书
饮料业务员岗位职责
2013/12/15 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年乡镇环保工作总结
2015/04/22 职场文书
不同意离婚上诉状
2015/05/23 职场文书
小学毕业感言200字
2015/07/30 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python