python实时招聘信息与岗位分析数据可视化大屏展示(selenium+mysql+flask)

第一部分(数据获取)

1.数据库表创建

首先通过python的sqlalchemy模块,来新建一个表。

creat_tables.py(配置好自己的数据库连接和密码)

from sqlalchemy import create_engine, Integer,String,Float
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column

#创建数据库的连接
engine = create_engine("mysql+pymysql://root:123456@localhost:3306/spiders?charset=utf8mb4")
#操作数据库,需要我们创建一个session
Session = sessionmaker(bind=engine)

#声明一个基类
Base = declarative_base()
class tencenttables(Base):
    ##表名称
    __tablename__ = 'job51_data2'
    #岗位,设置为主键
    id = Column(Integer,primary_key=True,autoincrement=True)
    # 岗位名称
    positionName = Column(String(length=50), nullable=False)
    # 工作年限
    workYear = Column(String(length=200), nullable=False)
    # 公司名字
    companyFullName = Column(String(length=200),nullable=False)
    # 学历
    education = Column(String(length=200), nullable=False)
    # 城市
    city = Column(String(length=10), nullable=True)
    # 业务方向
    industryField = Column(String(length=300), nullable=True)
    # 薪资
    salary = Column(String(length=200), nullable=False)
    # 公司福利标签
    companyLabelList = Column(String(length=200), nullable=True)
    # 公司规模
    companySize = Column(String(length=30), nullable=True)
    # 公司类型
    financeStage = Column(String(length=300), nullable=True)
    # 公司详情页
    url_href = Column(String(length=100),nullable=False)
    # 抓取日期
    crawl_date = Column(String(length=200), nullable=False)
if __name__ == '__main__':
    #创建数据表
    tencenttables.metadata.create_all(engine)

首先在mysql里面新建spiders数据库,然后运行查看查看已经创建好的字段

image-20220421120331990

2.数据爬取入库

爬取思路,通过selenium自动化模拟人工浏览网站,下载html然后通过解析数据插入到数据库中

在这里插入图片描述

以下是爬取代码(小部分):

    for page in range(1,20):
        print(f'=======正在爬取第{page}页数据内容=======')
        time.sleep(5)
        url = f'https://search.51job.com/list/000000,000000,0000,00,9,99,python,2,{page}.html'
        response = requests.get(url=url,headers=headers)
        ##获取数据
        print(response.text)
        ##解析数据
        html_data = re.findall('window.__SEARCH_RESULT__ = (.*?)</script>',response.text)[0]
        print(html_data)
        json_data = json.loads(html_data)
        engine_jds = json_data['engine_jds']
        print(engine_jds)
        item = {}

爬取成功后查看数据库

image-20220421120403270

3.数据存储与查询

思路:利用session对象的query方法,可以过滤查询想要的数据。

session.query(Lagoutables.workYear).filter(Lagoutables.crawl_date==self.date).all()

   ........
    def query_salary_result(self):
        info = {}
        # 查询今日抓取到的薪资数据
        result = self.mysql_session.query(tencenttables.salary).filter(
         tencenttables.crawl_date==self.date
          ).all()
        # 处理原始数据
        result_list1 = [x[0] for x in result]
        # 计数,并返回
        # print(result_list1)
        result_list2 = [x for x in Counter(result_list1).items() if x[1]>1]

        result = [{"name": x[0], "value": x[1]} for x in result_list2]
        name_list = [name['name'] for name in result]
        info['x_name'] = name_list
        info['data'] = result
        return info
    ........

第二部分(前端展示)

简单查看一下前端代码结构:
image-20200603204534726

第三部分(flask web应用)

使用flask将index.html转化为web应用

run.py

from flask import Flask, render_template, jsonify
from lagou_spider.handle_insert_data import lagou_mysql

# 实例化flask
app = Flask(__name__)

# 注册路由
# @app.route("/")
# def index():
#     return "Hello World"

@app.route("/get_echart_data")
def get_echart_data():
    info = {}
    # 行业发布数量分析
    info['echart_1'] = lagou_mysql.query_industryfield_result()
    # print(info['echart_1'] )
    # 薪资发布数量分析
    info['echart_2'] = lagou_mysql.query_salary_result()
    # 岗位数量分析,折线图
    info['echart_4'] = lagou_mysql.query_job_result()
    #工作年限分析
    info['echart_5'] = lagou_mysql.query_workyear_result()
    #学历情况分析
    info['echart_6'] = lagou_mysql.query_education_result()
    #融资情况
    info['echart_31'] = lagou_mysql.query_financestage_result()
    #公司规模
    info['echart_32'] = lagou_mysql.query_companysize_result()
    #岗位要求
    info['echart_33'] = lagou_mysql.query_jobNature_result()
    #各地区发布岗位数
    info['map'] = lagou_mysql.query_city_result()
    return jsonify(info)

@app.route("/",methods=['GET','POST'])
def lagou():
    # 库内数据总量,今日抓取量
    result = lagou_mysql.count_result()
    return render_template('index.html',result=result)

if __name__ == '__main__':
    # 启动flask
    app.run()

思路:

(1)首先需要通过编写JS文件,将几个图的数据放在一个方法里提高聚合,抽取出来提高可复用性。

(2)然后通过拼接把获取到的JSON格式的数据,按key:balue格式分配出来。

代码如下:

利用Ajax通信

image-20200603205032275

运行run.py后查看5000端口:

image-20220421121317416

本案例代码已经同步到码云,有需要的联系qq2434013294获取,不免费

  • 20
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值