python3小项目——爬取智联招聘信息(二)

2024-01-27 22:58

本文主要是介绍python3小项目——爬取智联招聘信息(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两天,心血来潮又把前几天的爬取招聘信息程序丰富了一下,是对爬取到的信息再处理以及分类保存。

具体功能:

将全部信息保存成矩阵形式,去除无用信息,并在当前目录下生成文件夹并此文件夹下把信息分类保存成.csv格式

 #删除除"公司规模": "20人以下", "20-99人"; "最低学历": "博士","大专"; "经验": "3-5年","5-10年", "10年以上"的情况

根据公司性质分类保存信息。

具体问题及解决方法:

1、筛选数据

利用Dataframe筛选数据

 df = df[(df.经验 != '3-5年') & (df.经验 !='5-10年') & (df.经验 !='10年以上') & (df.最低学历 !='博士') & (df.最低学历 !='大专') & (df.公司规模 != '20人以下')]

df_pri = df[df.公司性质.isin(['民营'])]:选择公司性质为 '民营' 的对象

2、保存数据

利用os模块,path = os.getcwd()获取当前目录;os.mkdir(r'{}'.format(str(city)+str(job)))  自动生成文件夹并命名

df_com.to_csv()保存成csv格式

具体代码:

# -*- coding: utf-8 -*-
"""
Created on Wed Jun  7 09:21:52 2017@author: qiu
"""
'''
@智联招聘职位搜索与数据获取
@拉勾网 专注于互联网招聘的网站:https://www.lagou.com/ 
@拉勾网 招聘的公司较少,且大部分需要有经验的公司
@拉勾网 查找限制选择性强
@BOSS直聘 查找限制选择性强 对象大众化 http://www.zhipin.com
@猎聘 更专业的招聘网站 有专门面向学生的招聘通道 https://campus.liepin.com/
@应届生网 页面布局太烂,不建议爬取。不过有专门针对应届生的招聘会论坛等信息,确实不错 http://www.yingjiesheng.com/
@由于拉钩和猎聘职位较少,而且可以满足高精确查找,这里只提供网址,自行搜索。
***********************@智联招聘职位搜索与数据获取***************************
'''import urllib
from urllib.parse import *
from bs4 import BeautifulSoup
import string
import random
import pandas as pd
import osheaders=["Mozilla/5.0 (Windows NT 6.1; Win64; rv:27.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36""Mozilla/5.0 (Windows NT 10.0; WOW64; rv:27.0) Gecko/20100101 Firfox/27.0""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36""Mozilla/5.0 (Windows NT 10.0; WOW64; rv:10.0) Gecko/20100101 Firfox/10.0""Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/21.0.1180.110 Safari/537.36""Mozilla/5.0 (X11; Ubuntu; Linux i686 rv:10.0) Gecko/20100101 Firfox/27.0""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/34.0.1838.2 Safari/537.36""Mozilla/5.0 (X11; Ubuntu; Linux i686 rv:27.0) Gecko/20100101 Firfox/27.0""Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"]
def get_content(url,headsers):'''@url:需要登录的网址@headers:模拟的登陆的终端*********************模拟登陆获取网址********************'''random_header = random.choice(headers)req = urllib.request.Request(url)req.add_header("User-Agent",random_header)req.add_header("Get",url)req.add_header("Host","sou.zhaopin.com")req.add_header("refer","http://sou.zhaopin.com/")html = urllib.request.urlopen(req)contents = html.read()#判断输出内容contents是否是字节格式if isinstance(contents,bytes):#转成字符串格式contents=contents.decode('utf-8')else:print('输出格式正确,可以直接输出')
##输出的是字节格式,需要将字节格式解码转成’utf-8‘return (contents)def get_content1(url,headsers):'''@url:需要登录的网址@headers:模拟的登陆的终端*********************模拟登陆获取网址********************'''random_header = random.choice(headers)req = urllib.request.Request(url)req.add_header("User-Agent",random_header)req.add_header("Get",url)req.add_header("Host","jobs.zhaopin.com")req.add_header("refer","http://sou.zhaopin.com/jobs/searchresult.ashx")html = urllib.request.urlopen(req)contents = html.read()#判断输出内容contents是否是字节格式if isinstance(contents,bytes):#转成字符串格式contents=contents.decode('utf-8')else:print('输出格式正确,可以直接输出')
##输出的是字节格式,需要将字节格式解码转成’utf-8‘return (contents)    def get_links_from(job, city, page):'''@job:工作名称@city:网址中城市名称@page:表示第几页信息@urls:所有列表的超链接,即子页网址****************此网站需要模拟登陆**********************返回全部子网页地址'''urls=[]for i in range(page):url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl={}&kw={}&p={}".format(str(city),str(job),i) url = quote(url, safe=string.printable)info = get_content(url,headers)soup = BeautifulSoup(info,"lxml")#设置解析器为“lxml”link_urls = soup.select('td.zwmc a')for url in link_urls:      urls.append(url.get('href'))return (urls)#url = "http://s.yingjiesheng.com/result.jsp?keyword=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98&city=217&start=0&period=0&sort=score&jobtype=1"    
#get_links_from('南京','数据挖掘', 5)
def get_link_info(url):'''@爬取的地址*****************获取此网站的有用信息并保存成字典形式****************'''    info = get_content1(url,headers)soup = BeautifulSoup(info,"lxml")#设置解析器为“lxml”occ_name = soup.select('div.fixed-inner-box h1')[0]com_name = soup.select('div.fixed-inner-box h2')[0]com_url = soup.select('div.inner-left.fl h2 a')[0]welfare = soup.select('div.welfare-tab-box')[0]wages = soup.select('div.terminalpage-left strong')[0]date = soup.select('div.terminalpage-left strong')[2]exper = soup.select('div.terminalpage-left strong')[4]num = soup.select('div.terminalpage-left strong')[6]area = soup.select('div.terminalpage-left strong')[1]nature = soup.select('div.terminalpage-left strong')[3]Edu = soup.select('div.terminalpage-left strong')[5]cate = soup.select('div.terminalpage-left strong')[7]com_scale = soup.select('ul.terminal-ul.clearfix li strong')[8]com_nature = soup.select('ul.terminal-ul.clearfix li strong')[9]com_cate = soup.select('ul.terminal-ul.clearfix li strong')[10]com_address = soup.select('ul.terminal-ul.clearfix li strong')[11]data = {"拉勾网":'https://www.lagou.com/', "猎聘":"https://campus.liepin.com/","应届生":"http://www.yingjiesheng.com/","网址":url,"工作名称":occ_name.text.strip(),"公司名称":com_name.text,"公司网址":com_url.get('href'),"福利":welfare.text.strip(),"月工资":wages.text.strip(),"发布日期":date.text.strip(),"经验":exper.text.strip(),"人数":num.text.strip(),"工作地点":area.text.strip(),"工作性质":nature.text.strip(),"最低学历":Edu.text.strip(),"职位类别":cate.text.strip(),"公司规模":com_scale.text.strip(),"公司性质":com_nature.text.strip(),"公司行业":com_cate.text.strip(),"公司地址":com_address.text.strip()}return (data)
#url = "http://jobs.zhaopin.com/145913042250065.htm"
#get_link_info(url)def get_links_all_info(job, city, page):'''@job:工作名称@city:网址中城市名称@page:表示前几页信息将全部信息保存成矩阵形式,去除无用信息,并在当前目录下生成文件夹并此文件夹下把信息分类保存成.csv格式'''urls = get_links_from(job, city, page)df = pd.DataFrame({"网址":[],"工作名称":[],"公司名称":[],"公司网址":[],"福利":[],"月工资":[],"发布日期":[],"经验":[],"人数":[],"工作地点":[],"工作性质":[],"最低学历":[],"职位类别":[],"公司规模":[],"公司性质":[],"公司行业":[],"公司地址":[],"拉勾网":[], "猎聘":[],"应届生":[]})links = []for url in urls:if "xiaoyuan" in url:links.append(url)columns = ['校园招聘地址']labeled_df = pd.DataFrame(columns=columns, data=links)#labeled_df.to_csv('{}\{}校园招聘{}地址.csv'.format(str(city)+str(job),str(city),str(job)))else:data = get_link_info(url)        #print (data)df = df.append(data,ignore_index=True)return dfdef remove_useless_info(df): '''#删除除"公司规模": "20人以下", "20-99人"; "最低学历": "博士","大专"; "经验": "3-5年","5-10年", "10年以上"的情况@Dataframe筛选数据 http://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html@df: 以矩阵形式存储爬取到的数据定义一个列表,存储指定列类型,删除需要删除的类型,利用isin()函数保留剩下的数据 ''''''**************公司规模问题****************************最低学历问题****************************经验问题**************'''df = df[(df.经验 != '3-5年') & (df.经验 !='5-10年') & (df.经验 !='10年以上') & (df.最低学历 !='博士') & (df.最低学历 !='大专') & (df.公司规模 != '20人以下')]return df
def save_info(job, city, page,df):'''**************公司性质问题**************'''#print (list(df.公司性质))'''@df_pri = df[df.公司性质.isin('民营')]@error:only list-like objects are allowed to be passed to isin(), you passed a [str]'''df_pri = df[df.公司性质.isin(['民营'])]df_com = df[df.公司性质.isin(['上市公司'])]df_sta = df[df.公司性质.isin(['国企'])]df_fore = df[df.公司性质.isin(['外商独资'])]df_joint = df[df.公司性质.isin(['合资'])]df_Gov = df[df.公司性质.isin(['事业单位'])]df_stock = df[df.公司性质.isin(['股份制企业'])]#    path = "E:\研究生阶段学习\编程语言\python\python爬虫\python源\招聘资料\智联招聘\job"#获取当前路径path = os.getcwd()#自动生成文件夹并命名os.mkdir(r'{}'.format(str(city)+str(job)))df_pri.to_csv('{}\{}{}——民营.csv'.format(str(city)+str(job),str(city),str(job)))df_com.to_csv('{}\{}{}——上市公司.csv'.format(str(city)+str(job),str(city),str(job)))df_sta.to_csv('{}\{}{}——国企.csv'.format(str(city)+str(job),str(city),str(job)))df_fore.to_csv('{}\{}{}——外商独资.csv'.format(str(city)+str(job),str(city),str(job)))df_joint.to_csv('{}\{}{}——合资.csv'.format(str(city)+str(job),str(city),str(job)))df_Gov.to_csv('{}\{}{}——事业单位.csv'.format(str(city)+str(job),str(city),str(job)))df_stock.to_csv('{}\{}{}——股份制企业.csv'.format(str(city)+str(job),str(city),str(job)))def get_recuite_info(job, city, page):'''获取招聘信息'''df = get_links_all_info(job, city, page)df_cleaned = remove_useless_info(df)save_info(job, city, page, df_cleaned)
'''
*********************获取招聘信息***************************
'''
get_recuite_info('嵌入式开发', '南京', 1)

总结:

1、这次主要是对爬取到的数据进行处理,这一块在机器学习问题中是数据预处理的内容。具体可以自行查找之一方面内容,还包括matplotlib的画图内容,可以实现数据可视化,很方便获取有用信息。

2、这一块应该还会再丰富,比如根据工资情况画图等等。但这一块只是为了学习python,为学习机器学习打基础用的。

3、有啥问题可以留言,写博客的目的,记录学习内容,更多的是供他人参考以及相互交流学习,CSDN上高手太多了,希望能得到他们评论指教。

这篇关于python3小项目——爬取智联招聘信息(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/651740

相关文章

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

springboot项目中集成shiro+jwt完整实例代码

《springboot项目中集成shiro+jwt完整实例代码》本文详细介绍如何在项目中集成Shiro和JWT,实现用户登录校验、token携带及接口权限管理,涉及自定义Realm、ModularRe... 目录简介目的需要的jar集成过程1.配置shiro2.创建自定义Realm2.1 LoginReal

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放