基于Python Django的拉勾网招聘信息爬取与展示系统

1 篇文章 0 订阅
1 篇文章 0 订阅

拉勾网招聘信息爬取展示开发报告

拉勾网招聘信息爬取展示开发任务分配

Django框架

功能

人员

Django应用

框架搭建

子应用创建

应用发布

拉勾网爬虫

Selenium的使用

爬虫代码的编写

爬虫数据解析

Echartsweb子应用

解析JSON

数据可视化

全国各省Python岗位招聘地区值域漫游图

Python岗位招聘前7名地区图

  1. 目标

实践目标

  1. 掌握Python基础语言语法知识;
  2. 掌握Pycharm工具的使用;
  3. 掌握SeleniumWeb应用程序测试的工具在爬虫中的使用;
  4. 掌握爬虫技术;Json解析方法;
  5. 掌握Django框架的使用;
  6. 掌握可视化工具Echarts;
  7. 掌握bootstrap页面框架的使用;

  1. 功能需求

爬取拉勾网Python全国招聘的求职信息,通过requests 请求获取单页面,然后分析页面加载找到数据,添加headers信息,模仿浏览器请求,最后解析页面,实现翻页爬取。根据爬取的结果信息进行数据分析与可视化,使用echarts实现数据可视化,展示Python岗位招聘全国范围内各个城市的招聘数量信息结果图形化展示。

图2-1 全国各省Python岗位招聘地区值域漫游图

图2-2 Python岗位招聘前7名地区图

  1. 开发环境
  2. 设计思路

类型

工具与环境

开发工具

Pycharm

技术运用

Python基础语法,类和对象,django框架,bootstrap,echarts,selenium。

使用Pycharm工具创建一个django web应用工程,工程名为:laweb。

    1. 拉钩网招聘信息爬取
  1. 分析页面。先分析下拉钩的页面,是通过ajax方式动态显示的,提交的参数是页数,通过post方式进行提交,为了获取数据,使用Selenium 。
  2. Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。

class lagou_swiper():

    # //设置初始化

    def init(self):

        self.alldata=[]

        self.driver=webdriver.Firefox()

        self.wait=WebDriverWait(self.driver,10)

        self.isnull=False

        self.position=input('请输入要爬取的职位')

        self.driver.get('https://www.lagou.com/jobs/list_' +self.position+ '?labelWords=&fromSearch=true&suginput=')

        self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="body-btn"]')))[0].click()

        self.cookies=input("请输入cookies")

  1. 爬取的数据写入到相应的文件中。把爬取的结果保存到la.txt中。

{'职位': 'python开发工程师', '城市': '深圳', '工资': '10k-17k', '经验': '经验3-5年', '学历背景': '本科', '公司名称': '柚子街'}
{'职位': 'Python开发工程师', '城市': '上海', '工资': '20k-40k', '经验': '经验3-5年', '学历背景': '大专', '公司名称': '得物App'}
{'职位': 'python', '城市': '上海', '工资': '16k-25k', '经验': '经验3-5年', '学历背景': '本科', '公司名称': 'CLPS'}
{'职位': '高级 Python 工程师', '城市': '深圳', '工资': '25k-35k·14薪', '经验': '经验5-10年', '学历背景': '本科', '公司名称': 'AfterShip'}

...

    1. Echarts可视化
  1. ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。
  2. ECharts可视化文件在django文件中的static中的echarts.min.js文件。

在模板页面Templates/index.html中通过<script src="{% static 'js/echarts.min.js'%}"></script>

进行引入。

  1. 技术分析
    1. Django框架Web应用
  1. Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
  2. 用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,告诉Django Python模块应该用作本站的URLConf,默认的是urls .py。
  3. 当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。然后按顺序逐个匹配URLConf里的URLpatterns。找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)。最后该view函数负责返回一个HttpResponse对象。

5.1.1 django工程的创建

1、创建工程

django-admin startproject laweb

# 这个工程会创建在当前目录下,所以想要在那个目录下创建工程就先到那个目录下,或者加上路径。

2、工程目录说明

查看工程目录

cd laweb# 进入工程目录

tree  # 即可查看当前工程中的目录信息

说明:

与项目同名的目录是工程文件

settings.py是项目整体的配置文件

urls.py是项目的路由配置文件

wsgi.py是项目与WSGI协议兼容的Web服务器入口

manage.py是项目的管理文件

5.1.2 工程的启动

python3 manage.py runserver ip:端口  # ip和端口号可以不写,默认是127.0.0.1 和 8000

5.1.3 创建子应用

python3 manage.py startapp echartsweb

# 需要先进入的工程目录下再进行创建子应用

子应用目录说明

admin.py文件是网站的后台管理站点的配置文件

apps.py文件是配置当前子应用的相关信息

migrations是用于存放数据库迁移历史文件

models.py是用于保存数据库模型类

tests.py文件是用于开发测试的

views.py文件是编写Web应用视图函数

    1. 拉勾网招聘信息爬取

爬取拉钩有反爬限制。采用Selenium 。Selenium 本是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖于浏览器,所以使用Python的selenium库的前提是:需要下载相应的浏览器驱动程序

      1. 引入各种模块

    

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from selenium.common.exceptions import TimeoutException

from selenium.common.exceptions import StaleElementReferenceException

      1. 初始化火狐浏览器

self.driver=webdriver.Firefox()

      1. 初始化设置信息

self.alldata=[]

self.driver=webdriver.Firefox()

self.wait=WebDriverWait(self.driver,10)

self.isnull=False

self.position=input('请输入要爬取的职位')

self.driver.get('https://www.lagou.com/jobs/list_' +self.position+ '?labelWords=&fromSearch=true&suginput=')

self.wait.until(EC.presence_of_all_elements_located((By.XPATH,'//div[@class="body-btn"]')))[0].click()

self.cookies=input("请输入cookies")

      1. 爬取信息本地保存

def save(self):

    with open('./la.txt','w',encoding='utf-8') as f:

        for item in self.alldata:

            for json_dict in item:

                f.write(str(json_dict)+'\n')

    1. 数据可视化
      1. 通过Json解析下载的la.txt数据

def json(request):

    city=[]

    allcity=[]

    d={}

    res = {}

    data=[]

    with open("./swiper_demo/la.txt",'r',encoding='UTF-8') as f:

        rows=f.readlines()

        for row in rows:

            row=row.replace("'",'"')

            r=eval(row)

            city.append(r['城市'])

      1. 发送到页面

def index(request):

    return render(request,'index.html',locals())

      1. 数据可视化显示

    <script type="text/javascript">

        $('#dishiod').click(function () {

            $("#myChart").attr("style", "display:block;");

            $("#myChart1").attr("style", "display:none;");

            var myChart = echarts.init(document.getElementById('myChart'));

            $.ajax({

                type: "get",

                async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)

                url: "/json", //请求发送到TestServlet处

                data: {},

                dataType: "json", //返回数据形式为json

                success: function (result) {

                    //请求成功时执行该函数内容,result即为服务器返回的json对象

                        myChart.hideLoading(); //隐藏加载动画

                        myChart.setOption({

                            title: {

                            text: '拉勾网python前7名地区',

                            subtext: '2020年最新数据',

                            x:'center',

                            textStyle: {

                                color: 'black'

                            }

                        },

        color: ['#3398DB'],

        tooltip: {

            trigger: 'axis',

            axisPointer: { // 坐标轴指示器,坐标轴触发有效

                type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'

            }

        },

        grid: {

            left: "0%",

            top: "10px",

            right: "10%",

            bottom: "4%",

            containLabel: true

        },

        xAxis: [{

            type: 'category',

            data: result.alldata,

            axisTick: {

                alignWithLabel: true

            },

        }],

        yAxis: [{

            type: 'value',

            axisLabel: {

                color: "white",

                fontSize: 12,

                fontFamily: 'sans-serif'

            },

            splitLine: {

                lineStyle: {

                    color: 'white',

                    width: 2

                }

            }

        }],

        series: [{

            name: '直接访问',

            type: 'bar',

            barWidth: '35%',

            data:result.value,

            itemStyle: {

                barBorderRadius: 5

            }

        }]});

                    }

                },

               

            )

        })

        $('#map').click(function () {

            $("#myChart").attr("style", "display:none;");

            $("#myChart1").attr("style", "display:block;");

            $('#money').attr("style","display:block")

            $('#area').attr("style","display:block")

            $('#number').attr("style","display:block")

            $('.zw').attr("style","display:none")

            $('#mychartzw h1').attr("style","display:none")

            $.ajax({

                type: "get",

                async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)

                url: "/map", //请求发送到TestServlet处

                data: {},

                dataType: "json", //返回数据形式为json

                success: function (result) {

                    var myChart = echarts.init(document.getElementById('myChart1'));

                    var geoCoordMap = result.obj1;

                    var convertData = function (data) {

                        var res = [];

                        for (var i = 0; i < data.length; i++) {

                            var geoCoord = geoCoordMap[data[i].name];

                            if (geoCoord) {

                                res.push({

                                    name: data[i].name,

                                    value: geoCoord.concat(data[i].value)

                                });

                            }

                        }

                        return res;

                    };

                    option = {

                        title: {

                            text: '拉勾网python全国招聘地区',

                            subtext: '2020年最新数据',

                            x: 'center',

                            textStyle: {

                                color: 'black'

                            }

                        },

                        toolbox: {

                            feature: {

                                saveAsImage: {}

                            }

                        },

                        tooltip: {

                            trigger: 'item',

                            formatter: function (params) {

                                return "地区" + ":" +

                                    params.name + ' : ' + params.value[2] + '处';

                            }

                        },

                        legend: {

                            orient: 'vertical',

                            y: 'top',

                            x: 'left',

                            data: ['地区'],

                            textStyle: {

                                color: 'black'

                            }

                        },

                        visualMap: {

                            min: 0,

                            max: 200,

                            calculable: true,

                            color: ['#d94e5d', '#eac736', '#50a3ba'],

                            textStyle: {

                                color: '#fff'

                            }

                        },

                        geo: {

                            map: 'china',

                            label: {

                                normal: {

                                    show: true

                                },

                                emphasis: {

                                    show: true,

                                }

                            },

                            itemStyle: {

                                normal: {

                                    show: true,

                                    areaColor: '#323c48',

                                    borderColor: '#111'

                                },

                                emphasis: {

                                    areaColor: '#2a333d'

                                }

                            }

                        },

                        series: [{

                            name: '地区',

                            type: 'scatter',

                            coordinateSystem: 'geo',

                            data: convertData(result.obj2),

                            symbolSize: 12,

                            label: {

                                normal: {

                                    formatter: '{b}',

                                    position: 'right',

                                    show: true

                                },

                                emphasis: {

                                    show: false

                                }

                            },

                        }]

                    }

                    myChart.setOption(option)

                }

            })

        })

    </script>

    1. 页面美化框架bootstrap

Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。

安装bootstrap.js,导入到/static/下即可。

  1. 跟我做
    1. 编写代码
      1. 拉勾网.py

      1. Index.html

      1. Views.py

  1. 运行
    1. 程序导入

1、启动PyCharm 2020.1 x64。

2、选择左上角“文件(F)”菜单,选择“File ->Open”,显示文件选择对话框。

3、跳到工程目录,选择“laweb”文件,点击“打开”,即可打开项目。

4、运行Django项目。

    1. 运行结果

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay_+wqq_635731323

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

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

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

打赏作者

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

抵扣说明:

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

余额充值