目录

  • 一、结果放在最前面
  • 二、爬虫
  • 三、数据处理
  • 四、Flask与ECharts

一、结果放在最前面


(请忽略截图右边的蓝色正方形)
使用爬虫爬取智联招聘上关于“数据分析师”岗位的信息,并应用flask和echarts技术实现数据分析结果。

二、爬虫

主函数(main):实现网页解析以及数据存储。

def main():kw = input("请输入你要搜索的岗位关键字:").strip()keyword = urllib.parse.quote(urllib.parse.quote(kw))   #二次编码# ka = input("请输入你要搜索的地区:").strip()# karea = getArea(ka)for i in range(1, 165):print('正在爬取第{}页信息'.format(i))baseurl = "https://search.51job.com/list/"+ str(000000) +",000000,0000,00,9,99,"+ keyword +",2,"+ str(i) +".html"    #全国+keywordhtml = askURL(baseurl)bs = BeautifulSoup(html,"html.parser")datalist = getData(bs)dbpath = "./51job.db"saveDB(datalist, dbpath)

网页解析(askURL):调用request和BeautifulSoup实现网页解析。

def askURL(url):head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"}request = urllib.request.Request(url,headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode('gbk', 'ignore')# print(html)except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e,"reason"):print(e.reason)return html

数据爬取(getData):获取招聘信息,公司链接、招聘岗位链接、公司名称、岗位名称、地区、薪水;调用getCOM获取公司链接内的信息,调用getREC获取招聘岗位信息,并合并返回给main()。

def getData(bs):datalist = []for item in bs.select(".dw_table > div.el"):data = {}item = str(item)link = re.findall(findLink, item)data['link'] = ''.join(link)title = re.findall(findTitle, item)data['title'] = ''.join(title)area = re.findall(findArea, item)data['area'] = ''.join(area)com = re.findall(findCom, item)data['com'] = ''.join(com)comlink = re.findall(findComLink, item)data['comlink'] = ''.join(comlink)salary = re.findall(findSalary, item)data['salary'] = ''.join(salary)strhtml = 'https://jobs.51job.com/'if data["link"].startswith(strhtml) and data['comlink'].startswith(strhtml):com_link = data['comlink']com_data = getCOM(com_link)data = dict(data.items(), **com_data)rec_link = data['link']recruit_data = getREC(rec_link)data = dict(data.items(), **recruit_data)datalist.append(data)return datalist

爬取公司信息(getCOM):获取公司链接内的信息,公司性质、公司规模、公司行业

def getCOM(com_link):com_html = askURL(com_link)bs = BeautifulSoup(com_html, "html.parser")# 公司信息CP_TYPE = ['民营公司', '上市公司', '事业单位', '国企', '外资(欧美)', '外资(非欧美)','创业公司', '政府机关', '合资', '外资', '合资', '外企代表处', '非营利组织']CP_SCALE = ['少于50人', '50-150人', '150-500人', '500-1000人','1000-5000人', '5000-10000人', '10000人以上']cp_info = bs.select('.in > p.ltype')[0].text.split('\xa0\xa0|\xa0\xa0')com_data = {}com_data['cp_type'] = com_data['cp_scale'] = com_data['industry'] = ''for i in CP_TYPE:if i in cp_info:com_data['cp_type'] = ibreakfor i in CP_SCALE:if i in cp_info:com_data['cp_scale'] = ibreakfor i in cp_info:if i not in CP_TYPE and i not in CP_SCALE:com_data['industry'] = ireturn com_data

爬取招聘信息(getREC):获取招聘岗位链接内的信息,经验、学历、招聘人数、发布日期、工作描述

def getREC(rec_link):jobHtml = askURL(rec_link)  #获取详情页bs = BeautifulSoup(jobHtml,"html.parser")# 经验、学历、招聘人数、发布日期text = bs.select(".ltype")job = {}if len(text) != 0:info = text[0].text.split('\xa0\xa0|\xa0\xa0')EDU = ['博士', '硕士', '本科', '大专','中专', '中技', '高中', '初中及以下']job['exp'] = job['edu'] = job['other'] = job['demand'] = job['pubdate'] = " "for i in info:if '经验' in i:job['exp'] = ielif i in EDU:job['edu'] = ielif '招' in i:job['demand'] = ielif '发布' in i:job['pubdate'] = ielse:job['other'] = ielse:job['exp'] = job['edu'] = job['other'] = job['demand'] = job['pubdate'] = " "job['msg'] = " "jobMsgList = bs.select(".job_msg > p")  #工作描述jobMsgStr = ""for str in jobMsgList:jobMsgStr = jobMsgStr + str.textjob["msg"] = jobMsgStr# jobList.append(job)return job

数据存储(saveData):

def saveDB(datalist, dbpath):init_db(dbpath)conn = sqlite3.connect(dbpath)cur = conn.cursor()for data in datalist:print(data)sql = '''insert or ignore into job_quanguo(link,title,comlink,com,area,salary,cp_type,cp_scale,industry,exp,edu,other,demand,pubdate,msg) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'''# print(sql)cur.execute(sql,(data['link'],data['title'],data['comlink'],data['com'],data['area'],data['salary'],data['cp_type'],data['cp_scale'],data['industry'],data['exp'],data['edu'],data['other'],data['demand'],data['pubdate'],data['msg']))conn.commit()cur.close()conn.close()

爬取结果:

一共爬取了7277条数据,包括:公司名称、链接、岗位名称、地区、薪水、企业性质、企业规模、行业、招聘要求、招聘信息等等。

三、数据处理

薪水处理:由于薪水是以上下限显示的,故将薪水分成三列,分别为下限,上限以及平均薪水。同时删除一部分没有显示薪水的信息。

def getSalary():datalist = []con = sqlite3.connect("51job.db")cur = con.cursor()sql = "SELECT com,title,area,cp_type,cp_scale,industry,exp,edu,salary FROM job_quanguo"data_quanguo = cur.execute(sql)for item in data_quanguo:string = "".join(item[8])if string.endswith('千/月'):num = string.replace("千/月","").split("-")sal = pd.to_numeric(num)*1000# datalist.append(pd.to_numeric(num)*1000)data1 = append_other(item)data2 = append_salary(sal)elif string.endswith('万/月'):num = string.replace("万/月","").split("-")sal = pd.to_numeric(num)*10000# datalist.append(pd.to_numeric(num)*10000)data1 = append_other(item)data2 = append_salary(sal)elif string.endswith('万/年'):num = string.replace("万/年","").split("-")sal = pd.to_numeric(num)*10000/12# datalist.append(pd.to_numeric(num)*10000/12)# append_other(item)data1 = append_other(item)data2 = append_salary(sal)else:continuedata = dict(data1.items(), **data2)datalist.append(data)cur.close()con.close()# df_salary = pd.DataFrame(columns=['low-salary','high-salary'])dbpath = "./51job.db"saveDB(datalist, dbpath)def append_salary(sal):data1 = {}data1['low-salary'] = sal[0].astype(np.int64)data1['high-salary'] = sal[1].astype(np.int64)data1['avg-salary'] = (sal[0].astype(np.int64)+sal[1].astype(np.int64))/2return data1

四、Flask与ECharts

主要参考了ECharts官方文档,在此就不一一论述了。

爬虫爬取招聘信息并进行数据分析相关推荐

  1. idea爬虫爬取招聘信息,大数据

    某工厂来学校培训大数据爬虫,先提供个网页 <%@ page language="java" import="java.util.*" pageEncodi ...

  2. python小爬虫(爬取职位信息和博客文章信息)

    1.python爬取招聘信息 简单爬取智联招聘职位信息(仅供学习) # !/usr/bin/env python # -*-coding:utf-8-*- """ @Au ...

  3. 苏宁易购网址爬虫爬取商品信息及图片

    利用scrapy来爬取苏宁官网上任何商品的信息,主要的信息有商品标题.商品现价.商品原价.商铺名称,以及用scrapy的ImagesPipeline来下载商品图片. 部分主函数代码如下: # -*- ...

  4. 用python爬虫爬取微博信息

    用python爬虫爬取微博信息 话不多说,直接上代码! import requests from bs4 import BeautifulSoup from urllib import parse i ...

  5. Node.js 爬虫爬取电影信息

    Node.js 爬虫爬取电影信息 本文地址:https://blog.csdn.net/weixin_45580251/article/details/107669713 爬取的是1905电影网的信息 ...

  6. 基于SpringBoot框架Wbe Magic爬虫框架爬取招聘信息项目(1)

    涉及的技术点:SpringBoot框架.Web Magic爬⾍框架.MySQL.mybatis. 使用语言:Java. 使用工具:idea. 本篇文章主要讲解搭建项目 以及 如何将页面数据输出打印到i ...

  7. mysql scrapy 重复数据_大数据python(scrapy)爬虫爬取招聘网站数据并存入mysql后分析...

    基于Scrapy的爬虫爬取腾讯招聘网站岗位数据视频(见本头条号视频) 根据TIOBE语言排行榜更新的最新程序语言使用排行榜显示,python位居第三,同比增加2.39%,为什么会越来越火,越来越受欢迎 ...

  8. Python网络爬虫爬取招聘数据(利用python简单零基础)可做可视化

    爬取Boss直聘相关的招聘数据 一.相关需求分析 1.目的 二.直聘网页结构分析 1.网页相关值的查找 2.网页的下一页规律查找 三.Python相关的第三库介绍 1.Urllib的介绍 (1)url ...

  9. python爬虫爬取房源信息

      目录 一.数据获取与预处理 二.csv文件的保存 三.数据库存储 四.爬虫完整代码 五.数据库存储完整代码 写这篇博客的原因是在我爬取房产这类数据信息的时候,发现csdn中好多博主写的关于此类的文 ...

  10. xpath 解析之爬取招聘信息

    文章目录 一.引子 环境安装 解析步骤 二.xpath 实战 爬取拉勾网 Python 岗位信息 Analysis Code 一.引子 xpath 是 XML 的路径语言,通俗一点讲就是通过元素的路径 ...

最新文章

  1. pdf批量添加图章_给PDF批量添加文本链接
  2. Base64Util 用户名和密码Base64编码Java代码
  3. java对象序列化为字符串
  4. linux系统下文件查找
  5. MacBook Pro 高功率模式:是如何工作的?
  6. CC2530基础实验二:电源管理与睡眠定时器
  7. java 免费发短信_java实现发短信功能---腾讯云短信
  8. 如何使用myabtisPlust将查询出的数据封装给vo对象
  9. 什么是smart原则,有什么好的例子
  10. 人民币对美元汇率中间价报6.7774元 下调109个基点
  11. [喷嚏]区块链已落地30个场景 商用时代正在加速来临
  12. 设计院总工毕生总结的200条经验
  13. c语言里什么叫double,c语言double什么意思
  14. Indoor Scene Recognition 室内场景识别数据集
  15. 2021年高处安装、维护、拆除考试试卷及高处安装、维护、拆除证考试
  16. Informatica bulk和normal模式
  17. word标尺灰色_如何在Microsoft Word中使用标尺
  18. opencv warpAffine()函数详解 -- 图像旋转与平移
  19. JQuery插件让图片旋转任意角度且代码极其简单
  20. 使用vue制作网页导航栏

热门文章

  1. 美团Robust热修复工具使用记录
  2. python输入整数输出英文_python练习 英文字符的鲁棒输入+数字的鲁棒输入
  3. 《Robust Consistent Video Depth Estimation》论文笔记
  4. 粗柳簸箕细柳斗,谁嫌爬虫男人丑 之 异步协程半秒扒光一本小说
  5. 【python】python基础与unittest基础
  6. 论坛发帖页面html,为Discuz门户文章和论坛帖子页面添加分享按钮
  7. Quartz定时任务自学
  8. 休假管理系统的问题描述与词汇表
  9. java将mp4转换成m3u8
  10. 游戏服务器架构演化史