赞
踩
拉勾网招聘信息爬取展示开发报告
拉勾网招聘信息爬取展示开发任务分配
实践目标
爬取拉勾网Python全国招聘的求职信息,通过requests 请求获取单页面,然后分析页面加载找到数据,添加headers信息,模仿浏览器请求,最后解析页面,实现翻页爬取。根据爬取的结果信息进行数据分析与可视化,使用echarts实现数据可视化,展示Python岗位招聘全国范围内各个城市的招聘数量信息结果图形化展示。
图2-1 全国各省Python岗位招聘地区值域漫游图
图2-2 Python岗位招聘前7名地区图
类型 | 工具与环境 |
开发工具 | Pycharm |
技术运用 | Python基础语法,类和对象,django框架,bootstrap,echarts,selenium。 |
使用Pycharm工具创建一个django web应用工程,工程名为:laweb。
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") |
{'职位': 'python开发工程师', '城市': '深圳', '工资': '10k-17k', '经验': '经验3-5年', '学历背景': '本科', '公司名称': '柚子街'} ... |
在模板页面Templates/index.html中通过<script src="{% static 'js/echarts.min.js'%}"></script>
进行引入。
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/下即可。
1、启动PyCharm 2020.1 x64。
2、选择左上角“文件(F)”菜单,选择“File ->Open”,显示文件选择对话框。
3、跳到工程目录,选择“laweb”文件,点击“打开”,即可打开项目。
4、运行Django项目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。