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

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de