爬虫爬取招聘信息并进行数据分析
目录
- 一、结果放在最前面
- 二、爬虫
- 三、数据处理
- 四、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官方文档,在此就不一一论述了。
爬虫爬取招聘信息并进行数据分析相关推荐
- idea爬虫爬取招聘信息,大数据
某工厂来学校培训大数据爬虫,先提供个网页 <%@ page language="java" import="java.util.*" pageEncodi ...
- python小爬虫(爬取职位信息和博客文章信息)
1.python爬取招聘信息 简单爬取智联招聘职位信息(仅供学习) # !/usr/bin/env python # -*-coding:utf-8-*- """ @Au ...
- 苏宁易购网址爬虫爬取商品信息及图片
利用scrapy来爬取苏宁官网上任何商品的信息,主要的信息有商品标题.商品现价.商品原价.商铺名称,以及用scrapy的ImagesPipeline来下载商品图片. 部分主函数代码如下: # -*- ...
- 用python爬虫爬取微博信息
用python爬虫爬取微博信息 话不多说,直接上代码! import requests from bs4 import BeautifulSoup from urllib import parse i ...
- Node.js 爬虫爬取电影信息
Node.js 爬虫爬取电影信息 本文地址:https://blog.csdn.net/weixin_45580251/article/details/107669713 爬取的是1905电影网的信息 ...
- 基于SpringBoot框架Wbe Magic爬虫框架爬取招聘信息项目(1)
涉及的技术点:SpringBoot框架.Web Magic爬⾍框架.MySQL.mybatis. 使用语言:Java. 使用工具:idea. 本篇文章主要讲解搭建项目 以及 如何将页面数据输出打印到i ...
- mysql scrapy 重复数据_大数据python(scrapy)爬虫爬取招聘网站数据并存入mysql后分析...
基于Scrapy的爬虫爬取腾讯招聘网站岗位数据视频(见本头条号视频) 根据TIOBE语言排行榜更新的最新程序语言使用排行榜显示,python位居第三,同比增加2.39%,为什么会越来越火,越来越受欢迎 ...
- Python网络爬虫爬取招聘数据(利用python简单零基础)可做可视化
爬取Boss直聘相关的招聘数据 一.相关需求分析 1.目的 二.直聘网页结构分析 1.网页相关值的查找 2.网页的下一页规律查找 三.Python相关的第三库介绍 1.Urllib的介绍 (1)url ...
- python爬虫爬取房源信息
目录 一.数据获取与预处理 二.csv文件的保存 三.数据库存储 四.爬虫完整代码 五.数据库存储完整代码 写这篇博客的原因是在我爬取房产这类数据信息的时候,发现csdn中好多博主写的关于此类的文 ...
- xpath 解析之爬取招聘信息
文章目录 一.引子 环境安装 解析步骤 二.xpath 实战 爬取拉勾网 Python 岗位信息 Analysis Code 一.引子 xpath 是 XML 的路径语言,通俗一点讲就是通过元素的路径 ...
最新文章
- pdf批量添加图章_给PDF批量添加文本链接
- Base64Util 用户名和密码Base64编码Java代码
- java对象序列化为字符串
- linux系统下文件查找
- MacBook Pro 高功率模式:是如何工作的?
- CC2530基础实验二:电源管理与睡眠定时器
- java 免费发短信_java实现发短信功能---腾讯云短信
- 如何使用myabtisPlust将查询出的数据封装给vo对象
- 什么是smart原则,有什么好的例子
- 人民币对美元汇率中间价报6.7774元 下调109个基点
- [喷嚏]区块链已落地30个场景 商用时代正在加速来临
- 设计院总工毕生总结的200条经验
- c语言里什么叫double,c语言double什么意思
- Indoor Scene Recognition 室内场景识别数据集
- 2021年高处安装、维护、拆除考试试卷及高处安装、维护、拆除证考试
- Informatica bulk和normal模式
- word标尺灰色_如何在Microsoft Word中使用标尺
- opencv warpAffine()函数详解 -- 图像旋转与平移
- JQuery插件让图片旋转任意角度且代码极其简单
- 使用vue制作网页导航栏