拉勾网招聘信息爬取展示开发报告
拉勾网招聘信息爬取展示开发任务分配
Django框架 | 功能 | 人员 |
Django应用 | 框架搭建 | |
子应用创建 | ||
应用发布 | ||
拉勾网爬虫 | Selenium的使用 | |
爬虫代码的编写 | ||
爬虫数据解析 | Echartsweb子应用 | |
解析JSON | ||
数据可视化 | 全国各省Python岗位招聘地区值域漫游图 | |
Python岗位招聘前7名地区图 |
实践目标
- 掌握Python基础语言语法知识;
- 掌握Pycharm工具的使用;
- 掌握SeleniumWeb应用程序测试的工具在爬虫中的使用;
- 掌握爬虫技术;Json解析方法;
- 掌握Django框架的使用;
- 掌握可视化工具Echarts;
- 掌握bootstrap页面框架的使用;
爬取拉勾网Python全国招聘的求职信息,通过requests 请求获取单页面,然后分析页面加载找到数据,添加headers信息,模仿浏览器请求,最后解析页面,实现翻页爬取。根据爬取的结果信息进行数据分析与可视化,使用echarts实现数据可视化,展示Python岗位招聘全国范围内各个城市的招聘数量信息结果图形化展示。
图2-1 全国各省Python岗位招聘地区值域漫游图
图2-2 Python岗位招聘前7名地区图
类型 | 工具与环境 |
开发工具 | Pycharm |
技术运用 | Python基础语法,类和对象,django框架,bootstrap,echarts,selenium。 |
使用Pycharm工具创建一个django web应用工程,工程名为:laweb。
- 分析页面。先分析下拉钩的页面,是通过ajax方式动态显示的,提交的参数是页数,通过post方式进行提交,为了获取数据,使用Selenium 。
- 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") |
- 爬取的数据写入到相应的文件中。把爬取的结果保存到la.txt中。
{'职位': 'python开发工程师', '城市': '深圳', '工资': '10k-17k', '经验': '经验3-5年', '学历背景': '本科', '公司名称': '柚子街'} ... |
- ECharts开源来自百度商业前端数据可视化团队,基于html5 Canvas,是一个纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。
- ECharts可视化文件在django文件中的static中的echarts.min.js文件。
在模板页面Templates/index.html中通过<script src="{% static 'js/echarts.min.js'%}"></script>
进行引入。
- Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。
- 用manage .py runserver 启动Django服务器时就载入了在同一目录下的settings .py。该文件包含了项目中的配置信息,如前面讲的URLConf等,其中最重要的配置就是ROOT_URLCONF,告诉Django Python模块应该用作本站的URLConf,默认的是urls .py。
- 当访问url的时候,Django会根据ROOT_URLCONF的设置来装载URLConf。然后按顺序逐个匹配URLConf里的URLpatterns。找到则会调用相关联的视图函数,并把HttpRequest对象作为第一个参数(通常是request)。最后该view函数负责返回一个HttpResponse对象。
1、创建工程
django-admin startproject laweb # 这个工程会创建在当前目录下,所以想要在那个目录下创建工程就先到那个目录下,或者加上路径。 |
2、工程目录说明
查看工程目录
cd laweb# 进入工程目录 tree # 即可查看当前工程中的目录信息 |
说明:
与项目同名的目录是工程文件
settings.py是项目整体的配置文件
urls.py是项目的路由配置文件
wsgi.py是项目与WSGI协议兼容的Web服务器入口
manage.py是项目的管理文件
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应用视图函数
爬取拉钩有反爬限制。采用Selenium 。Selenium 本是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖于浏览器,所以使用Python的selenium库的前提是:需要下载相应的浏览器驱动程序。
-
-
- 引入各种模块
-
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 |
-
-
- 初始化火狐浏览器
-
self.driver=webdriver.Firefox() |
-
-
- 初始化设置信息
-
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") |
-
-
- 爬取信息本地保存
-
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') |
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['城市']) |
-
-
- 发送到页面
-
def index(request): return render(request,'index.html',locals()) |
-
-
- 数据可视化显示
-
<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> |
Bootstrap,来自 Twitter,是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷。
安装bootstrap.js,导入到/static/下即可。
-
-
- Index.html
-
-
-
- Views.py
-
1、启动PyCharm 2020.1 x64。
2、选择左上角“文件(F)”菜单,选择“File ->Open”,显示文件选择对话框。
3、跳到工程目录,选择“laweb”文件,点击“打开”,即可打开项目。
4、运行Django项目。