IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python模拟登录 -> 正文阅读

[Python知识库]python模拟登录

一、原理

比较cookies和session的区别:

cookies的数据信息存放在客户端浏览器上,而session的数据信息存放在服务器上。

通过获取session可实现以登录的状态获取用户资料

本次模拟登录对象为:https://github.com/,以开发者模式登录账号获取一个session

在这里插入图片描述
以下为表单数据,需要传入网址
在这里插入图片描述
原理不难,现在可着手开始工作

二、普通requests获取session进行登录

import requests
import re
from lxml import etree

class Login(object):
    def __init__(self):
        self.headers={
            'referer':'https://github.com/',
            'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/91.0.4472.114 Mobile Safari/537.36',
            'host':'github.com'
        }
        self.login_url='https://github.com/login'#登录地址
        self.post_url='https://github.com/session'#会话地址
        
        self.session=requests.Session()#维持会话
    def token(self):
        resp=self.session.get(self.login_url,headers=self.headers)
        selector=etree.HTML(resp.text)
        token=selector.xpath('//*[@id="login"]/div[4]/form/input[1]/@value')[0]#获取表单数据中authenticity_token参数
        return token
    def login(self,email,password):
        post_data={
            'commit':'Sign in',
            'authenticity_token':self.token(),
            'login':email,
            'password':password
        }#构造表单,传入网址
        resp=self.session.post(self.post_url,data=post_data,headers=self.headers)
        print(re.findall('lx-2021', resp.body.decode()))#正则表达式输出内容
if __name__=='__main__':
    login=Login()
    login.login(email='账号',password='密码')#输入自己的github账号以及密码

三、Scrapy模拟登录

import scrapy
import re
from scrapy import FormRequest

class GtSpider(scrapy.Spider):
    name = 'gt'
    allowed_domains = ['github.com']
    start_urls = ['http://github.com/login']

    '''
    注释内容也可以实现模拟登录,通过FormRequest.from_response
    自动获取action,即跳转页面。
    '''
    # def parse(self, response):
    #     yield FormRequest.from_response(
    #         response,
    #         formdata={'login':'123456789','password':'123456789'},
    #         callback=self.parse_item #回调函数
    #
    #     )
    def parse(self, response):
        authenticity_token=response.xpath('//input[@name="authenticity_token"]/@value').extract_first()
        commit=response.xpath('//input[@name="commit"]/@value').extract_first()
        formdata=dict(
            login='2725909286@qq.com',
            password='13049273494a',
            authenticity_token= authenticity_token,
            commit=commit
        )
        yield FormRequest(
            'http://github.com/session',
            formdata=formdata,
            callback=self.parse_item
        )

    def parse_item(self,response):
        print(re.findall('lx-2021',response.body.decode()))

通过正则获取到了个人昵称,表示登录成功!

在这里插入图片描述
注意:GitHub网址打开看运气,有时候打得开,有时候打不开。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:57:20  更:2021-10-17 11:59:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:51:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码