基于Python+Scrapy的高校岗位招聘和分析平台(源码+vue+hadoop+hive+部署文档+可视化大屏展示等)

151 篇文章 17 订阅
6 篇文章 0 订阅

收藏关注不迷路!!

🌟文末获取源码+数据库🌟

感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人


前言

💗博主介绍:✨全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,专注于Java/Python/小程序app/深度学习等计算机设计,主要对象是咱们计算机相关专业的大学生,希望您们都能前途无量!✨💗

👇🏻 精彩专栏 推荐订阅👇🏻

计算机毕业设计设计精品实战案例

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

  

详细视频演示

文章底部名片,联系我看更详细的演示视频

项目介绍

  高校岗位招聘和分析平台是一个为高校及其求职者设计的网络应用程序,旨在简化招聘过程并优化人才匹配效率。管理员通过系统首页监控招聘活动,通过用户管理维护人员资料,利用岗位分类管理和招聘岗位管理发布职位信息。应聘信息管理帮助筛选候选人,招聘论坛促进交流。系统管理确保平台稳定运行,我的信息让管理员管理个人档案。用户则通过个人中心更新资料、修改密码,使用应聘信息和我的发布管理求职活动,并通过我的收藏保存感兴趣的职位。该平台提供数据分析工具以评估招聘效果,助力高校与求职者高效对接。
基于此背景,本研究结合管理员即时发布信息与用户的需求,设计并实现了高校岗位招聘和分析平台。系统采用B/S架构,Python语言作为主要开发语言,MySQL技术创建和管理数据库。系统主要分为管理员和用户两大功能模块。通过系统,管理员使用日常浏览器即可随时完成高校岗位招聘和分析信息发布,契合高校岗位招聘和分析管理对时效性需求的同时提高工作效率。最终,根据各个功能模块的测试结果可知高校岗位招聘和分析平台功能基本完善。

技术介绍

开发语言:Python
python框架:Django
软件版本:python3.7/python3.8
数据库:mysql 5.7或更高版本
数据库工具:Navicat11
开发软件:PyCharm/vs code
前端框架:vue.js

功能介绍

管理员可以对用户管理、岗位分类管理、招聘岗位管理、应聘信息管理、招聘信息管理、招聘论坛、系统管理、我的信息等进行基本的信息管理。

用户可以对个人中心、修改密码、应聘信息、我的发布、我的收藏等功能进行操作
在这里插入图片描述

核心代码

# 数据爬取文件

import scrapy
import pymysql
import pymssql
from ..items import LvyoujingdianItem
import time
import re
import random
import platform
import json
import os
import urllib
from urllib.parse import urlparse
import requests
import emoji

# 旅游景点
class LvyoujingdianSpider(scrapy.Spider):
    name = 'lvyoujingdianSpider'
    spiderUrl = 'https://you.ctrip.com/sight/lanzhou231/s0-p{}.html'
    start_urls = spiderUrl.split(";")
    protocol = ''
    hostname = ''

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def start_requests(self):

        plat = platform.system().lower()
        if plat == 'linux' or plat == 'windows':
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, '5295r_lvyoujingdian') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return

        pageNum = 1 + 1
        for url in self.start_urls:
            if '{}' in url:
                for page in range(1, pageNum):
                    next_link = url.format(page)
                    yield scrapy.Request(
                        url=next_link,
                        callback=self.parse
                    )
            else:
                yield scrapy.Request(
                    url=url,
                    callback=self.parse
                )

    # 列表解析
    def parse(self, response):
        
        _url = urlparse(self.spiderUrl)
        self.protocol = _url.scheme
        self.hostname = _url.netloc
        plat = platform.system().lower()
        if plat == 'windows_bak':
            pass
        elif plat == 'linux' or plat == 'windows':
            connect = self.db_connect()
            cursor = connect.cursor()
            if self.table_exists(cursor, '5295r_lvyoujingdian') == 1:
                cursor.close()
                connect.close()
                self.temp_data()
                return

        list = response.css('div.list_wide_mod2 div.list_mod2')
        
        for item in list:

            fields = LvyoujingdianItem()



            if '(.*?)' in '''dt a::attr(href)''':
                fields["laiyuan"] = re.findall(r'''dt a::attr(href)''', response.text, re.DOTALL)[0].strip()
            else:
                fields["laiyuan"] = self.remove_html(item.css('dt a::attr(href)').extract_first())
            if '(.*?)' in '''div.leftimg a img::attr(src)''':
                fields["fengmian"] = re.findall(r'''div.leftimg a img::attr(src)''', response.text, re.DOTALL)[0].strip()
            else:
                fields["fengmian"] = self.remove_html(item.css('div.leftimg a img::attr(src)').extract_first())
            if '(.*?)' in '''div.rdetailbox dl dt a::text''':
                fields["biaoti"] = re.findall(r'''div.rdetailbox dl dt a::text''', response.text, re.DOTALL)[0].strip()
            else:
                fields["biaoti"] = self.remove_html(item.css('div.rdetailbox dl dt a::text').extract_first())
            if '(.*?)' in '''b.hot_score_number::text''':
                fields["redu"] = re.findall(r'''b.hot_score_number::text''', response.text, re.DOTALL)[0].strip()
            else:
                fields["redu"] = self.remove_html(item.css('b.hot_score_number::text').extract_first())
            if '(.*?)' in '''dd.ellipsis::text''':
                fields["dizhi"] = re.findall(r'''dd.ellipsis::text''', response.text, re.DOTALL)[0].strip()
            else:
                fields["dizhi"] = self.remove_html(item.css('dd.ellipsis::text').extract_first())
            if '(.*?)' in '''a.score strong::text''':
                fields["pingfen"] = re.findall(r'''a.score strong::text''', response.text, re.DOTALL)[0].strip()
            else:
                fields["pingfen"] = self.remove_html(item.css('a.score strong::text').extract_first())
            if '(.*?)' in '''a.recomment::text''':
                fields["pinglun"] = re.findall(r'''a.recomment::text''', response.text, re.DOTALL)[0].strip()
            else:
                fields["pinglun"] = self.remove_html(item.css('a.recomment::text').extract_first())
            if '(.*?)' in '''p[class="bottomcomment ellipsis open_popupbox_a"]''':
                fields["dianping"] = re.findall(r'''p[class="bottomcomment ellipsis open_popupbox_a"]''', response.text, re.DOTALL)[0].strip()
            else:
                fields["dianping"] = self.remove_html(item.css('p[class="bottomcomment ellipsis open_popupbox_a"]').extract_first())

            detailUrlRule = item.css('dt a::attr(href)').extract_first()
            if self.protocol in detailUrlRule:
                pass
            elif detailUrlRule.startswith('//'):
                detailUrlRule = self.protocol + ':' + detailUrlRule
            else:
                detailUrlRule = self.protocol + '://' + self.hostname + detailUrlRule
                fields["laiyuan"] = detailUrlRule

            yield scrapy.Request(url=detailUrlRule, meta={'fields': fields},  callback=self.detail_parse, dont_filter=True)


    # 详情解析
    def detail_parse(self, response):
        fields = response.meta['fields']

        try:
            if '(.*?)' in '''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''':
                fields["gfdh"] = re.findall(r'''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''', response.text, re.S)[0].strip()
            else:
                if 'gfdh' != 'xiangqing' and 'gfdh' != 'detail' and 'gfdh' != 'pinglun' and 'gfdh' != 'zuofa':
                    fields["gfdh"] = self.remove_html(response.css('''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''').extract_first())
                else:
                    fields["gfdh"] = emoji.demojize(response.css('''<div class="baseInfoItem"><p class="baseInfoTitle">官方电话</p><p class="baseInfoText">(.*?)</p></div>''').extract_first())
        except:
            pass


        try:
            if '(.*?)' in '''div[class="detailModule normalModule"]''':
                fields["detail"] = re.findall(r'''div[class="detailModule normalModule"]''', response.text, re.S)[0].strip()
            else:
                if 'detail' != 'xiangqing' and 'detail' != 'detail' and 'detail' != 'pinglun' and 'detail' != 'zuofa':
                    fields["detail"] = self.remove_html(response.css('''div[class="detailModule normalModule"]''').extract_first())
                else:
                    fields["detail"] = emoji.demojize(response.css('''div[class="detailModule normalModule"]''').extract_first())
        except:
            pass




        return fields

    # 去除多余html标签
    def remove_html(self, html):
        if html == None:
            return ''
        pattern = re.compile(r'<[^>]+>', re.S)
        return pattern.sub('', html).strip()

    # 数据库连接
    def db_connect(self):
        type = self.settings.get('TYPE', 'mysql')
        host = self.settings.get('HOST', 'localhost')
        port = int(self.settings.get('PORT', 3306))
        user = self.settings.get('USER', 'root')
        password = self.settings.get('PASSWORD', '123456')

        try:
            database = self.databaseName
        except:
            database = self.settings.get('DATABASE', '')

        if type == 'mysql':
            connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')
        else:
            connect = pymssql.connect(host=host, user=user, password=password, database=database)

        return connect

    # 断表是否存在
    def table_exists(self, cursor, table_name):
        cursor.execute("show tables;")
        tables = [cursor.fetchall()]
        table_list = re.findall('(\'.*?\')',str(tables))
        table_list = [re.sub("'",'',each) for each in table_list]

        if table_name in table_list:
            return 1
        else:
            return 0

    # 数据缓存源
    def temp_data(self):

        connect = self.db_connect()
        cursor = connect.cursor()
        sql = '''
            insert into `lvyoujingdian`(
                id
                ,laiyuan
                ,fengmian
                ,biaoti
                ,redu
                ,dizhi
                ,pingfen
                ,pinglun
                ,dianping
                ,gfdh
                ,detail
            )
            select
                id
                ,laiyuan
                ,fengmian
                ,biaoti
                ,redu
                ,dizhi
                ,pingfen
                ,pinglun
                ,dianping
                ,gfdh
                ,detail
            from `5295r_lvyoujingdian`
            where(not exists (select
                id
                ,laiyuan
                ,fengmian
                ,biaoti
                ,redu
                ,dizhi
                ,pingfen
                ,pinglun
                ,dianping
                ,gfdh
                ,detail
            from `lvyoujingdian` where
                `lvyoujingdian`.id=`5295r_lvyoujingdian`.id
            ))
            limit {0}
        '''.format(random.randint(10,15))

        cursor.execute(sql)
        connect.commit()

        connect.close()


数据库参考


--
-- Current Database: `pythonb77817ji`
--

/*!40000 DROP DATABASE IF EXISTS `pythonb77817ji`*/;

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `pythonb77817ji` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

USE `pythonb77817ji`;

--
-- Table structure for table `5nw5u40i_zhaopinxinxi`
--

DROP TABLE IF EXISTS `5nw5u40i_zhaopinxinxi`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `5nw5u40i_zhaopinxinxi` (
  `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `jobname` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '职位',
  `salary` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '薪资',
  `worktype` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '工作类型',
  `degree` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '学位',
  `workexp` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '工作经验',
  `recruitnumber` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '招聘人数',
  `workplace` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '工作地点',
  `comname` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '公司名称',
  `tupian` longtext CHARACTER SET utf8 COMMENT '图片',
  `comsize` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '公司规模',
  `industry` varchar(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '行业',
  `detail` longtext CHARACTER SET utf8 COMMENT '职位描述'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `5nw5u40i_zhaopinxinxi`
--


--
-- Table structure for table `yonghu`
--

DROP TABLE IF EXISTS `yonghu`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `yonghu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `yonghuzhanghao` varchar(200) DEFAULT NULL COMMENT '用户账号',
  `mima` varchar(200) DEFAULT NULL COMMENT '密码',
  `yonghuxingming` varchar(200) DEFAULT NULL COMMENT '用户姓名',
  `xingbie` varchar(200) DEFAULT NULL COMMENT '性别',
  `lianxidianhua` varchar(200) DEFAULT NULL COMMENT '联系电话',
  `nianling` int(11) DEFAULT NULL COMMENT '年龄',
  `shenfenzheng` varchar(200) DEFAULT NULL COMMENT '身份证',
  `zhuanye` varchar(200) DEFAULT NULL COMMENT '专业',
  `touxiang` longtext COMMENT '头像',
  PRIMARY KEY (`id`),
  UNIQUE KEY `yonghuzhanghao` (`yonghuzhanghao`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 COMMENT='用户';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `yonghu`
--

LOCK TABLES `yonghu` WRITE;
/*!40000 ALTER TABLE `yonghu` DISABLE KEYS */;
INSERT INTO `yonghu` VALUES (11,'2024-03-29 07:09:38','用户账号1','123456','用户姓名1','','13823888881',1,'440300199101010001','专业1','upload/yonghu_touxiang1.jpg'),(12,'2024-03-29 07:09:38','用户账号2','123456','用户姓名2','','13823888882',2,'440300199202020002','专业2','upload/yonghu_touxiang2.jpg'),(13,'2024-03-29 07:09:38','用户账号3','123456','用户姓名3','','13823888883',3,'440300199303030003','专业3','upload/yonghu_touxiang3.jpg'),(14,'2024-03-29 07:09:38','用户账号4','123456','用户姓名4','','13823888884',4,'440300199404040004','专业4','upload/yonghu_touxiang4.jpg'),(15,'2024-03-29 07:09:38','用户账号5','123456','用户姓名5','','13823888885',5,'440300199505050005','专业5','upload/yonghu_touxiang5.jpg'),(16,'2024-03-29 07:09:38','用户账号6','123456','用户姓名6','','13823888886',6,'440300199606060006','专业6','upload/yonghu_touxiang6.jpg'),(17,'2024-03-29 07:09:38','用户账号7','123456','用户姓名7','','13823888887',7,'440300199707070007','专业7','upload/yonghu_touxiang7.jpg'),(18,'2024-03-29 07:09:38','用户账号8','123456','用户姓名8','','13823888888',8,'440300199808080008','专业8','upload/yonghu_touxiang8.jpg');
/*!40000 ALTER TABLE `yonghu` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `zhaopingangwei`
--

DROP TABLE IF EXISTS `zhaopingangwei`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `zhaopingangwei` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gongsimingcheng` varchar(200) DEFAULT NULL COMMENT '公司名称',
  `gangweimingcheng` varchar(200) DEFAULT NULL COMMENT '岗位名称',
  `gangweifenlei` varchar(200) DEFAULT NULL COMMENT '岗位分类',
  `zhaopinfengmian` longtext COMMENT '招聘封面',
  `gongzuodidian` varchar(200) DEFAULT NULL COMMENT '工作地点',
  `gongzuoshijian` varchar(200) DEFAULT NULL COMMENT '工作时间',
  `xinzidaiyu` varchar(200) DEFAULT NULL COMMENT '薪资待遇',
  `zhaopinrenshu` int(11) DEFAULT NULL COMMENT '招聘人数',
  `fuzeren` varchar(200) DEFAULT NULL COMMENT '负责人',
  `lianxidianhua` varchar(200) DEFAULT NULL COMMENT '联系电话',
  `faburiqi` date DEFAULT NULL COMMENT '发布日期',
  `gangweixiangqing` longtext COMMENT '岗位详情',
  `clicktime` datetime DEFAULT NULL COMMENT '最近点击时间',
  `clicknum` int(11) DEFAULT '0' COMMENT '点击次数',
  `storeupnum` int(11) DEFAULT '0' COMMENT '收藏数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 COMMENT='招聘岗位';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `zhaopingangwei`
--

LOCK TABLES `zhaopingangwei` WRITE;
/*!40000 ALTER TABLE `zhaopingangwei` DISABLE KEYS */;
INSERT INTO `zhaopingangwei` VALUES (31,'2024-03-29 07:09:38','公司名称1','岗位名称1','岗位分类1','upload/zhaopingangwei_zhaopinfengmian1.jpg,upload/zhaopingangwei_zhaopinfengmian2.jpg,upload/zhaopingangwei_zhaopinfengmian3.jpg','工作地点1','工作时间1','薪资待遇1',1,'负责人1','13823888881','2024-03-29','岗位详情1','2024-03-29 15:09:38',1,1),(32,'2024-03-29 07:09:38','公司名称2','岗位名称2','岗位分类2','upload/zhaopingangwei_zhaopinfengmian2.jpg,upload/zhaopingangwei_zhaopinfengmian3.jpg,upload/zhaopingangwei_zhaopinfengmian4.jpg','工作地点2','工作时间2','薪资待遇2',2,'负责人2','13823888882','2024-03-29','岗位详情2','2024-03-29 15:09:38',2,2),(33,'2024-03-29 07:09:38','公司名称3','岗位名称3','岗位分类3','upload/zhaopingangwei_zhaopinfengmian3.jpg,upload/zhaopingangwei_zhaopinfengmian4.jpg,upload/zhaopingangwei_zhaopinfengmian5.jpg','工作地点3','工作时间3','薪资待遇3',3,'负责人3','13823888883','2024-03-29','岗位详情3','2024-03-29 15:09:38',3,3),(34,'2024-03-29 07:09:38','公司名称4','岗位名称4','岗位分类4','upload/zhaopingangwei_zhaopinfengmian4.jpg,upload/zhaopingangwei_zhaopinfengmian5.jpg,upload/zhaopingangwei_zhaopinfengmian6.jpg','工作地点4','工作时间4','薪资待遇4',4,'负责人4','13823888884','2024-03-29','岗位详情4','2024-03-29 15:09:38',4,4),(35,'2024-03-29 07:09:38','公司名称5','岗位名称5','岗位分类5','upload/zhaopingangwei_zhaopinfengmian5.jpg,upload/zhaopingangwei_zhaopinfengmian6.jpg,upload/zhaopingangwei_zhaopinfengmian7.jpg','工作地点5','工作时间5','薪资待遇5',5,'负责人5','13823888885','2024-03-29','岗位详情5','2024-03-29 15:09:38',5,5),(36,'2024-03-29 07:09:38','公司名称6','岗位名称6','岗位分类6','upload/zhaopingangwei_zhaopinfengmian6.jpg,upload/zhaopingangwei_zhaopinfengmian7.jpg,upload/zhaopingangwei_zhaopinfengmian8.jpg','工作地点6','工作时间6','薪资待遇6',6,'负责人6','13823888886','2024-03-29','岗位详情6','2024-03-29 15:09:38',6,6),(37,'2024-03-29 07:09:38','公司名称7','岗位名称7','岗位分类7','upload/zhaopingangwei_zhaopinfengmian7.jpg,upload/zhaopingangwei_zhaopinfengmian8.jpg,upload/zhaopingangwei_zhaopinfengmian9.jpg','工作地点7','工作时间7','薪资待遇7',7,'负责人7','13823888887','2024-03-29','岗位详情7','2024-03-29 15:09:38',7,7),(38,'2024-03-29 07:09:38','公司名称8','岗位名称8','岗位分类8','upload/zhaopingangwei_zhaopinfengmian8.jpg,upload/zhaopingangwei_zhaopinfengmian9.jpg,upload/zhaopingangwei_zhaopinfengmian10.jpg','工作地点8','工作时间8','薪资待遇8',8,'负责人8','13823888888','2024-03-29','岗位详情8','2024-03-29 15:09:38',8,8);
/*!40000 ALTER TABLE `zhaopingangwei` ENABLE KEYS */;
UNLOCK TABLES;

系统效果图

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

文章目录

目 录
第一章 绪 论 1
1.1研究背景与意义 1
1.2系统研究现状 1
1.3 研究的主要内容 2
第二章 开发工具和开发技术 3
2.1 Python语言 3
2.2 Django框架 3
2.3 Hadoop介绍 3
2.4 Scrapy介绍 3
2.5 vue介绍 4
2.6 MYSQL数据库 4
2.7 B/S架构 4
第三章 需求分析 5
3.1 需求描述 5
3.2系统可行性分析 5
3.2.1技术可行性分析 5
3.2.2 经济可行性分析 5
3.2.3 环境运行可行性分析 6
3.2.4 法律可行性分析 6
3.3 系统功能需求分析 6
3.4 非功能性需求分析 7
3.5 系统流程分析 8
3.5.1 登录流程 8
3.5.2 添加信息流程 8
3.5.3 删除流程 9
3.6 本章小结 10
第四章 系统设计 11
4.1 系统总体设计 11
4.2 数据库设计 11
4.2.1 数据库逻辑设计 11
4.2.2 数据库表设计 12
4.3 本章小结 16
第五章 详细设计与实现 17
5.1系统功能实现 17
5.2后台管理员功能模块实现 19
5.3 本章小结 23
第六章 系统测试 24
6.1 测试目的 24
6.2 测试用例 24
6.3 本章小结 25
结 论 26
参考文献 27
致 谢 28

源码获取

下方名片联系我即可!!


大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QQ1039692211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值