python3小项目——爬取智联招聘信息(二)
来源:互联网 发布:奶茶店如何做网络 编辑:程序博客网 时间:2024/05/17 06:12
这两天,心血来潮又把前几天的爬取招聘信息程序丰富了一下,是对爬取到的信息再处理以及分类保存。
具体功能:
将全部信息保存成矩阵形式,去除无用信息,并在当前目录下生成文件夹并此文件夹下把信息分类保存成.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 urllibfrom urllib.parse import *from bs4 import BeautifulSoupimport stringimport randomimport pandas as pdimport 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 df def 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 dfdef 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小项目——爬取智联招聘信息(二)
- python3小项目——爬取招聘信息(智联招聘)
- 【Java Web小项目——招聘网站】前期准备
- 小白Python3爬虫—HTTP(二)
- 爬取智联招聘的招聘信息
- python爬虫实例——爬取智联招聘信息
- Python3爬虫小程序——爬取各类天气信息
- Python3爬虫小程序——爬取各类天气信息(2)
- Python3爬虫小程序——爬取各类天气信息(3)
- Python3爬虫小程序——爬取各类天气信息(4)
- 初学者教程:第一只爬虫——爬取招聘信息(二)
- javaweb小项目二——MyShopping
- Android小项目二——MySnake
- python3 爬虫—爬取CSDN博客文章信息(二)
- 爬取智联招聘信息
- python3爬取百度招聘信息使用进程池
- python3爬取拉勾网招聘信息存为excel格式
- 腾讯、科大讯飞、小恩爱招聘信息
- JAVA获得UUID、获得当前时间(年月日,并转化为数据库存储的Timestamp、String格式)
- 动态规划实例(二):最长公共子序列(LCS)
- Android开发-数据存储与IO
- MongoDB使用笔记
- 苹果IOS开发者账号总结
- python3小项目——爬取智联招聘信息(二)
- MTK 开发调试方法
- 中文编程尝试
- 【pytorch】模型的搭建保存加载
- Apache Commons 工具类介绍及简单使用
- ES6 Promise 用法
- 苹果面试8大难题及答案
- 移动端与PHP服务端接口通信流程设计(基础版)
- Delphi 跨语言环境 乱码问题