前言

这个项目是在学校做的,主要是想对各大招聘网站的招聘数据进行分析,没准能从中发现什么,这个项目周期有些长,以至于在项目快要结束时发现网上已经有了一些相关的项目,我后续会把相关的项目材料放在我的GitHub上面,链接为:https://github.com/roguesir ,项目主要分为以下几项:数据获取与处理、探索性数据分析、数据挖掘算法建模等,这篇blog先介绍数据获取与处理。

数据获取

系统环境

Mac OS系统,python3.6

网站分析

各个招聘网站的结构不同,进行正则匹配的方式也不同,本项目供爬取了前程无忧、智联招聘、拉勾网等多家招聘网站的web数据,以51job为例进行介绍:
前程无忧的招聘页面如下图所示,项目最终想要得到的数据包括岗位名称、工作地点、薪资待遇、岗位介绍、公司性质等信息,实际上需要两次爬取页面,第一次爬取搜索页面获得URL,第二次通过URL爬取相关信息。第一次使用Python的urllib和requests库实现,第二次使用Python的BeautifulSoup库实现。

爬虫编写

起初的爬虫代码设置如下

# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import sys
import importlib
importlib.reload(sys)def get_html_page(lst,html):res = requests.get(html)res.encoding = 'gbk'soup = BeautifulSoup(res.text, 'html.parser')for job in soup.select('.tHjob'):position = job.select('h1')[0]['title']print(position)lst.append(position)location = job.select('.lname')[0].textlst.append(location)salary = job.select('strong')[0].textlst.append(salary)companyname = job.select('a')[0]['title']if len(companyname) > 0:lst.append(companyname)property = job.select('.ltype')[0].textlst.append(property)for comp in soup.select('.tCompany_main'):experience = comp.select('.sp4')[0].textlst.append(experience)education = comp.select('.sp4')[1].textlst.append(education)number = comp.select('.sp4')[2].textlst.append(number)introduce = comp.select('.tmsg')[0].textlst.append(introduce)return lstdef write_txt(content):with open('raw-cs-info1.txt','a') as f:for item in content:f.write(item+'\n')def main():print('running main')for url in open('web-mis-url1-1.txt'):print(url)lst = []content = get_html_page(lst, url)write_txt(content)print('Finished!')main()

后来发现对于个别网页,这样跑会挂掉,有的匹配不成功就会出问题,于是将代码做了修改:

try:for job in soup.select('.tHjob'):position = job.select('h1')[0]['title']print(position)if len(position)<1:   lst.append(discribe[0])else:lst.append('null')
except:lst.append('null')

上面的代码实现了对出现问题的匹配进行异常捕获,出现异常的匹配直接在文本中写入null,而不会中断程序,对每个属性进行设置,最终只需要对文本中的null进行处理就OK了。

数据处理

基本预处理

爬虫爬下来的数据基本上还算干净,只有个别的匹配出现失误,这可能由于网站html标签不规则导致,这个问题在爬取前程无忧时候出现了,在智联招聘等网站没有出现。

# coding=utf-8
import rewith open('new098.txt','a') as f:for line in open('cs-job-discribe.txt'):new_line = line.replace('<br>','')new_line = re.sub(r'<.+>','',line)new_line = re.sub(r'[0-9][0-9]\-[0-9][0-9].+','',new_line)f.write(new_line)'''if len(new_line)==1:new_line = re.sub(r'\s',',',new_line)  # 将样本中的\空格\t\v\n\f等用','替换f.write(new_line)'''

网页html中本身带有的\空格\v\f\t\n等,写入文档会显示,因此需要进行预处理,把爬取下来的数据规范化。

数据重复问题:

由于项目是从不同的招聘网站上爬取数据,存在同一条招聘信息出现多次的情况,需要进行去重处理,另外,全部信息存储在cs-info.xlsx文件中,另将每个属性的数据存储在txt文件中,其中存在大量重复数据需要进行去重处理。

总结

在此过程中出现的一些问题进行说明:
(1)编码问题:在设置了utf-8编码的情况下,爬取保存的数据仍然会出现乱码现象,需要设置html.decode=’gbk’才能解决。
(2)使用时也尝试了用requests和urllib库实现匹配提取,这个用在岗位描述信息匹配上比较好,代码如下:

import re
import requests
import urllibres = requests.get(html)
res.encoding = 'gbk'
try:a = urllib.urlopen(html) html = a.read()html = html.decode('gbk')reg = re.compile(r'<div class="bmsg job_msg inbox.*?<br>(.*?)<div class="mt10">',re.S)discribe = re.findall(reg,html)print discribe[0]# print(discribe)lst.append(discribe[0])
except:lst.append('null')

【ML项目】基于网络爬虫和数据挖掘算法的web招聘数据分析(一)——数据获取与处理相关推荐

  1. 【项目精选】基于网络爬虫技术的网络新闻分析(论文+源码+视频)

    基于网络爬虫技术的网络新闻分析主要用于网络数据爬取.本系统结构如下: (1)网络爬虫模块. (2)中文分词模块. (3)中3文相似度判定模块. (4)数据结构化存储模块. (5)数据可视化展示模块. ...

  2. 爬虫应用|基于网络爬虫技术的网络新闻分析

    作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .掘金特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Java项目.毕业设计.简历模板.学习资料.面试题库.技术互助 ...

  3. 【毕业设计_课程设计】基于网络爬虫的新闻采集和订阅系统的设计与实现(源码+论文)

    文章目录 0 项目说明 1 项目说明 2 系统需求 3 系统架构 4 效果展示 5 论文目录 6 项目工程 0 项目说明 基于网络爬虫的新闻采集和订阅系统的设计与实现 提示:适合用于课程设计或毕业设计 ...

  4. 基于Hadoop的并行数据挖掘算法工具箱——Dodo

    1.dodo Weka是由新西兰Waikato大学研发的数据处理和知识发现软件包.其可以实现数据预处理.聚类.分类.回归.特征选择.可视化等各种数据挖掘的任务.Weka被广泛用于各种数据挖掘任务中算法 ...

  5. 基于网络爬虫的XSS漏洞检测技术

    1. 背景和意义 在早期的网站设计中,网页的存在形式都是静态的.静态的网页内容稳定,不会经常更新,但是在后期却不易维护.如果需要维护更新网页,则必须重新编辑HTML网页,因此当网站很庞大的时候,维护静 ...

  6. 基于网络爬虫的商品询价系统的设计与实现

    介绍 商品比价系统(基于网络爬虫) crawler:采用的是selenium框架(java实现),用它来爬虫,并将爬取的商品数据入库. display:是网页展示模块,你可以在该模块搜索需要比价的商品 ...

  7. 【赠书】基于鲲鹏的大数据挖掘算法实战:清华华为倾力出品!

    新年快到了,特地安排一期送书活动,感谢大家这一年的关注!大家有需要的这本书的可以参与这次活动哟!(具体参与方式见文末!) 计算机企业核心技术是企业的立身之本,更是企业把握市场主动权.扩大自身竞争优势的 ...

  8. 浅谈网络爬虫中广度优先算法和代码实现

    前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...

  9. Java基于网络爬虫的股票信息收集软件

    技术:Java等 摘要: 在当今社会,互联网的发展,给人类的生活和工作带来了极大的便利,随着互联网的进步与改革,"大数据"这个词在近几年逐渐的渗透进我们生活中.大数据,它的基本的含 ...

最新文章

  1. 【HeadFirst 设计模式学习笔记】2 观察者模式
  2. 尝鲜党:Nexus5、6刷安卓M教程
  3. android Context的使用
  4. WWDC 2013 Session笔记 - iOS7中的多任务
  5. php把1拆分成三份,【php】位运算如何拆分
  6. 再有人问你MySQL索引原理,就把这篇文章甩给他!
  7. Breeze:抢先体验Kubernetes 1.13.0高可用图形化部署
  8. YOLOv3 提升 5.91 mAP,IoU在目标检测中的正确打开方式
  9. raster | 多图层栅格对象的一些处理方法
  10. 您对TOP Server的德语、中文和日语语言支持了解吗?(一)
  11. 关闭网页html代码,网页中设置禁止查看源代码(保护源代码)
  12. 美股全线收涨 特斯拉涨超7% 瑞幸大跌近13%
  13. win7 c盘空间不足怎么扩大
  14. 第12届蓝桥杯国赛真题剖析-2021年5月29日Scratch编程初中级组
  15. 算法:一个小人通过有鳄鱼的河
  16. 元末明初为什么会爆发农民起义
  17. 来玩个游戏,解锁IT女~
  18. Linux运维课程 第一阶段 重难点摘要(二)网络基础
  19. 自己总结的web前端面试题之数据库
  20. 视频后期合成软件:nuke12 mac版 v12.2v4最新版(支持big sur)

热门文章

  1. 市场调研报告-全球与中国商用燃气灶市场现状及未来发展趋势
  2. 中国联通奠定3G市场龙头地位
  3. PPT中图表类型的选择
  4. 8G+128G固态,新款笔记本,吃鸡贼爽!
  5. ping与icmp协议
  6. uni-app跨域 和 Vue 跨域
  7. 网页设计和平面设计的区别在哪儿?
  8. UTD/GMT 本地时间
  9. iphone13如何设置音量键连拍 苹果13开启音量键连拍功能教程
  10. 实时帧数手机_过度营销还是真实刚需?三分钟带你了解手机高刷新率的那些事...