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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

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