利用Python爬取前程无忧(51job)上的招聘岗位
爬取数据集
整理后数据集
开始之前先了解一下什么是网络爬虫,百度百科对于网络爬虫的解释是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。也就是相当于我做一个机器人,我让它上网帮我找大量的资料。我要告诉他我想要什么数据,怎么找,是从一个网站找,还是好多网站一起找,数据中要包含什么属性,以上就是我们所讲的爬取策略。这其中要学习一些网络结构的内容,请读者自行参阅HTML的相关文献,非常简单。大部分网站的爬取流程如下:
好!明确了爬取流程,我们下边以数据挖掘类就业岗位为例,爬取51job上的相关招聘信息。
首先分析需求:希望获得数据挖掘就业岗位的就业信息;
其次确定目标网站:前程无忧;
爬取方式:用Python自己编;
对于网址循环方式,我们要根据网站的结构来确定。
打开前程无忧搜索网站,如下图所示输入数据挖掘的检索内容,点击搜索。
搜索结果页面如下,图中红圈处是我们输入的检索词,红框是页面的网址,让我们看看页面的网址是什么吧。
网站界面网址
https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E6%258C%2596%25E6%258E%2598,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=
这么长一串实际上有用的也只有网址在‘?’前的一部分是有效的,也就是https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E6%258C%2596%25E6%258E%2598,2,1.html,带问号的网址是动态网页的网址,问号后边是数据库交互内容,与网页内容没有必然关系。那么问题又来了,%25E6%2595%25B0%25E6%258D%25AE%25E6%258C%2596%25E6%258E%2598目标网址中的这一串又是是什么东西?
通常网站上对于汉字是经过编码转换的,这一串就是“数据挖掘”这四个汉字经过编码转换后的东东,我们不用理解具体的转换方法,那么我们如果不使用汉字转换,直接输入https://search.51job.com/list/000000,000000,0000,00,数据挖掘,2,1.html行不行呢?好像是不可以的,所以我们必须进行编码,网页显示如下:
下面看看这一页有多少数据,一页有50条,一共有213页的数据。
如何让爬虫自动翻页并爬取呢?我们还要看看网页的页码循环结构。相似页面通常会有一定的逻辑结构,这样会方便网站的管理,我们也是利用这一点,循环网址,不断爬取数据。
只有职位,公司,位置和薪酬的信息对于我们的研究可能是不够的,我们需要获取更多的信息来深入分析,所以我们进入详细页面。这里我们需要介绍一下页面查看器。本文使用火狐浏览器,读者可以自行查找其他浏览器打开页面查看器的方式,右击岗位名称,点击查看元素。
操作结果如下,我们看到有一个连接在这个标签上(HTML内容)。
复制上述地址并在浏览器打开,正是我们需要的详情界面。
最后一步:目标数据包含的属性,本文用红框标出。
好,上代码!
# -*- coding:utf-8 -*-
# By qixinlei
import urllib
import re,codecs
import time,random
import requests
from lxml import html
from urllib import parse
import csv#搜索关键字,这里只爬取了数据挖掘的数据,读者可以更换关键字爬取其他行业数据
key='数据挖掘'#编码调整,如将“数据挖掘”编码成%25E6%2595%25B0%25E6%258D%25AE%25E6%258C%2596%25E6%258E%2598
key=parse.quote(parse.quote(key))#伪装爬取头部,以防止被网站禁止
headers={'Host':'search.51job.com','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)\Chrome/63.0.3239.132 Safari/537.36'}#打开Data_mining.csv文件,进行写入操作
csvFile = open("Data_mining.csv", 'w', newline='')
writer = csv.writer(csvFile)
writer.writerow(('link','job','company','salary','area','experience',\'education','companytype','direction','describe'))#获取职位详细页面
def get_links(page):url ='http://search.51job.com/list/000000,000000,0000,00,9,99,'+key+',2,'+ str(page)+'.html'r= requests.get(url,headers,timeout=10)s=requests.session()s.keep_alive = Falser.encoding = 'gbk'reg = re.compile(r'class="t1 ">.*? <a target="_blank" title=".*?" href="(.*?)".*? <span class="t2">', re.S)links = re.findall(reg, r.text)return links#多页处理,下载到文件
def get_content(link):r1=requests.get(link,headers,timeout=10)s=requests.session()s.keep_alive = Falser1.encoding = 'gb2312't1=html.fromstring(r1.text)#print(link)job=t1.xpath('//div[@class="tHeader tHjob"]//h1/text()')[0].strip()print(job)company = t1.xpath('//p[@class="cname"]/a/text()')[0].strip()#print(company)salary = t1.xpath('//div[@class="cn"]//strong/text()')[0].strip()#print(salary)area = t1.xpath('//p[@class="msg ltype"]/text()')[0].strip()#print(area)experience = t1.xpath('//p[@class="msg ltype"]/text()')[1].strip()#print(experience)education= t1.xpath ('//p[@class="msg ltype"]/text()')[2].strip()#print(education)companytype=t1.xpath('//p[@class="at"]/text()')[0].strip()#print(companytype)companyscale = t1.xpath('//p[@class="at"]/text()')[1].strip()#print(companyscale)direction = t1.xpath('//div[@class="com_tag"]/p/a/text()')[0].strip()#print(direction)describe = t1.xpath('//div[@class="bmsg job_msg inbox"]//text()')#print(describe)writer.writerow((link,job,company,salary,area,experience,education,companytype,direction,describe))return True#主调动函数
#爬取前三页信息
for i in range(1,4): print('正在爬取第{}页信息'.format(i))links=get_links(i)for link in links:try:get_content(link)except:print("数据有缺失值")continue#关闭写入文件
csvFile.close()
运行结果如下:
我们看到,爬取的数据很乱,需要进行数据处理,我们用正则表达式进行数据处理。
下一篇:python运用正则表达式进行数据处理
利用Python爬取前程无忧(51job)上的招聘岗位相关推荐
- 利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息
新增:国外疫情网站介绍 已更新:爬取国外疫情数据 已更新:新型肺炎历史数据下载 2020年3月27日补充: 制作了一个全球肺炎数据查询下载网站,效果如下: 访问地址:http://119.3.227. ...
- python爬取电脑本地数据_利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息...
原标题:利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息 新型肺炎肆虐全国,可以预知,最近一两年地理学中会有一部分论文研究新型肺炎的空间分布及与其他指标的关联分析.获取其患病人 ...
- python爬取boss直聘招聘信息_年底啦,利用Python爬取Boss直聘的招聘信息,为明年跳槽做准备...
原标题:年底啦,利用Python爬取Boss直聘的招聘信息,为明年跳槽做准备 前言 为什么都说程序员的薪资高,但是刚开始入职的你,薪资并不是自己想象中的那样,首先是你的工作经验不足,其次就是需要不断的 ...
- python爬取前程无忧当日的全部招聘信息
用了几天时间写成的爬取前程无忧的当日的招聘信息,通过多线程的方式同时爬取多个城市的信息,作为资料保存下来,一下是完整代码,可以直接复制粘贴爬取 这里爬取的数据条件是是24小时内,周末双休的,会在当前文 ...
- Python利用Scrapy爬取前程无忧
** Python利用Scrapy爬取前程无忧 ** 一.爬虫准备 Python:3.x Scrapy PyCharm 二.爬取目标 爬取前程无忧的职位信息,此案例以Python为关键词爬取相应的职位 ...
- 爬取前程无忧51job(动态数据)
爬取前程无忧51job网上全国"python"关键字所对应的岗位招聘信息 利用Requests和正则表达式方法,爬取前程无忧51job网站上全国"爬虫"关键字对 ...
- python爬取前程无忧_用python爬取前程无忧网,看看我们是否真的“前程无忧”?...
The best time to plant a tree was 10 years ago,the second best time is now. 种一棵树最好的时间是十年前,其次是现在. 利用p ...
- python爬取前程无忧scrapy存mogondb案例
一.分析网页 新:python爬取前程无忧scrapy存mogondb案例+可视化 原网页直达 1.比如java字段,可以先拿到全部的el获取java字段的href,然后在逐个访问进入详情页 2.编写 ...
- 用python爬取前程无忧网,看看我们是否真的“前程无忧”?
作者:旧时晚风拂晓城 公众号:凹凸数据 The best time to plant a tree was 10 years ago,the second best time is now. 种一棵树 ...
- python 怎么爬桌软件数据_如何利用Python爬取并分析红岭创投的数据?
第一步:爬取数据 通过 selenium + Firefox 的无头模式将需要的数据爬取出来,代码实现不在赘述,详细步骤可查看我的上一篇图文(如何利用Python爬取网易新闻), 由于 seleniu ...
最新文章
- Linux01-Linux编辑内核定制属于自己的内核49
- web访问hive速度怎么样_使用Hive的web界面:HWI
- maven占位符$变量无法替换
- java设计模式建造_Java设计模式——建造模式(Builder Pattern)
- 使用Speedment 3.0.17及更高版本简化交易
- mybaties总结+hibernate总结
- 史上最全jdk版本新特性大全
- xamppmysql访问被拒绝_XAMPP中无法开始MySQL的问题
- iOS 单个页面设置横屏
- SQL Server 2005 分页SQL
- Struts2-03-拦截器(BOS物流项目用户登录拦截)
- linux定时器时间轮算法详解
- 《林林数据结构笔记》线段树求数组区间和,单点更新,区间更新+lazy思想
- Linux系统安装教程(详细版)
- 第019讲:函数:我的地盘听我的 | 课后测试题及答案(小甲鱼)
- tecplot——Fluent重叠网格解决方案
- 二元logistic模型案例_基于Logistic回归的二元分类应用(含公式推导)
- PreScan里动力学模型的2D和3D的区别
- 任正非自罚100万:“不要脸”的人,有多可怕?
- 论文阅读笔记 | 三维目标检测——PointRCNN
热门文章
- Canonical 在 Linux 上提供 Flutter 桌面应用支持
- 嵌入式软件开发能力提高的几个途径
- Spring 实战-第六章-渲染Web视图-6.2创建JSP视图
- 如何用C#做一个类似于桌面插件的程序(转)
- 手机刷机后丢失照片恢复怎么做到?
- vuex存储什么数据_Redis除了存储数据以外还能做什么?
- OpenCV(三)彩色图灰度化、通道分离、单通道反差处理(灰度图)、多通道反差处理(彩色图)
- [docker]九、compose是什么?有什么用?以及用compose启动web、redis和wordpress
- 省市区前端json格式 上
- 5万款Lr顶级调色预设合集,精心整理,分类清晰,摄影师调色师必备素材,够用一辈子