python爬取前程無憂和拉勾資料分析崗位並分析
一、明確需求
分析資料分析崗位的招聘情況,包括地區分佈、薪資水平、職位要求等,瞭解最新資料分析崗位的情況。
環境:python 3.6
設計的工具:Tableau工具(主要是生成圖方便,用matplotlib也可以達到同樣的效果)
二、資料採集
首先編寫爬蟲,這裡主要是爬取前程無憂和拉勾網,直接上前程無憂的程式碼:
關於前程無憂爬蟲程式碼,網上有很多教程,不過大部分只取了地區、職位、工資和日期這幾個欄位,沒有涉及到崗位要求和崗位職責,因為要了解職位的需求以及後面方便畫詞雲,我就自己寫了一個程式碼。說一下拉勾和前程無憂兩者的區別,前程無憂爬了2000頁,不過大概只有前24頁是跟資料分析有關的崗位,拉勾網的資料量比較少,全國主要城市爬下來,一共也才2000多條,而且基本集中在北京上海杭州。調整一下前程無憂爬蟲格式跟拉勾一樣,把兩個表格合併起來一起分析。
# -*- coding:utf-8 -*- import urllib import re,codecs import time,random import requests from lxml import html from urllib import parse key='資料分析' 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'} def get_links(page): url =''+key+',2,'+ str(page)+'.html' r= requests.get(url,headers,timeout=10) s=requests.session() s.keep_alive = False r.encoding = 'gbk' reg = re.compile(r'class="t1 ">.*? ', 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 = False r1.encoding = 'gbk' t1=html.fromstring(r1.text) try: job=t1.xpath('//div[@class="tHeader tHjob"]//h1/text()')[0] company = t1.xpath('//p[@class="cname"]/a/text()')[0] print(company) label=t1.xpath('//p[@class="t2"]/span/text()') education=t1.xpath('//div[@class="t1"]//span[2]/text()')[0] salary = re.findall(re.compile(r'.*?(.*?)',re.S),r1.text)[0] area = t1.xpath('//div[@class="tHeader tHjob"]//span[@class="lname"]/text()')[0] companytype=t1.xpath('//p[@class="msg ltype"]/text()') workyear=t1.xpath('//div[@class="t1"]//span[1]/text()')[0] describe = re.findall(re.compile(r'(.*?)任職要求',re.S),r1.text) require = re.findall(re.compile(r'.*?任職要求(.*?)',re.S),r1.text) try: file = codecs.open('51job.xls', 'a+', 'utf-8') item = str(company)+'t'+str(job)+'t'+str(education)+'t'+str(label)+'t'+str(salary)+'t'+str(companytype)+'t'+str(workyear)+'t'+str(area)+'t'+str(workyear)+str(describe)+'t'+str(require)+'n' file.write(item) file.close() return True except Exception as e: print(e) return None #output='{},{},{},{},{},{},{},{}n'.format(company,job,education,label,salary,area,describe,require) #with open('51job.csv', 'a+', encoding='utf-8') as f: #f.write(output) except: print('None') for i in range(1,2000): print('正在爬取第{}頁資訊'.format(i)) try: #time.sleep(random.random()+random.randint(1,5)) links=get_links(i) for link in links: get_content(link) #time.sleep(random.random()+random.randint(0,1)) except: continue print('有點問題')
三、資料探索和預處理:
資料爬取完了,大概有十萬條資料,看起來還不錯。
然而問題來了:
1.資料有重複,需要去重。
2.崗位不是全部是資料分析,也有招聘店長、銷售、運營之類的崗位,需要去除無關資料。
利用pandas模組,短短几行程式碼就可以實現了,而且資料很快。
# -*- coding: UTF-8 -*- import pandas as pd import numpy as np data=pd.read_excel('51joball.xlsx',sheet_name='Sheet1',header=0) df=pd.DataFrame(data) df=df[True- df.公司.duplicated()]#去重 df=df[df.職位.str.contains(r'.*?資料.*?|.*?分析.*?')]#提取包含資料或者分析的崗位 df.to_excel('new51job.xlsx')接下來還有一個問題需要處理,就是資料規範化,薪資待遇這欄,有的是千/月,有的是萬每年,有的是元/天,有的是K每月,不規劃化,無法進行分析。地區這一欄,有的有區,有的沒區,我們規劃到城市這個級別就好了。這裡利用xlrd模組讀取Excel表格,當然換成pandas一樣也可以。
#coding:utf8 import xlrd import codecs import re #載入Excel資料,獲得工作表和行數 def load_from_xlsx(file): data = xlrd.open_workbook(file) table0 = data.sheet_by_name('Sheet1') nrows = table0.nrows return table0, nrows #利用正規表示式提取月薪,把待遇規範成千/月的形式 def get_salary(salary): if '-'in salary: #針對1-2萬/月或者10-20萬/年的情況,包含- low_salary=re.findall(re.compile('(d*.?d+)'),salary)[0] high_salary=re.findall(re.compile('(d?.?d+)'),salary)[1] if u'萬' in salary and u'年' in salary:#單位統一成千/月的形式 low_salary = float(low_salary) / 12 * 10 high_salary = float(high_salary) / 12 * 10 elif u'萬' in salary and u'月' in salary: low_salary = float(low_salary) * 10 high_salary = float(high_salary) * 10 else:#針對20萬以上/年和100元/天這種情況,不包含-,取最低工資,沒有最高工資 low_salary = re.findall(re.compile('(d*.?d+)'), salary)[0] high_salary="" if u'萬' in salary and u'年' in salary:#單位統一成千/月的形式 low_salary = float(low_salary) / 12 * 10 elif u'萬' in salary and u'月' in salary: low_salary = float(low_salary) * 10 elif u'元'in salary and u'天'in salary: low_salary=float(low_salary)/1000*21#每月工作日21天 return low_salary,high_salary def main(): data = load_from_xlsx(r'new51job.xlsx') table, nrows = data[0], data[1] print('一共有{}行資料,開始清洗資料'.format(nrows)) for i in range(1,nrows): id=table.row_values(i)[0] company=table.row_values(i)[1] position = table.row_values(i)[2] education = table.row_values(i)[3] welfare = table.row_values(i)[4] salary=table.row_values(i)[5] area = table.row_values(i)[6][:2]#地區取到城市,把區域去掉 companytype = table.row_values(i)[7] companysize = table.row_values(i)[8] field = table.row_values(i)[9] experience = table.row_values(i)[10] responsibility = table.row_values(i)[11] requirement = table.row_values(i)[12] if salary:#如果待遇這欄不為空,計算最低最高待遇 getsalary=get_salary(salary) low_salary=getsalary[0] high_salary=getsalary[1] else: low_salary=high_salary="" print('正在寫入第{}條,最低工資是{}k,最高工資是{}k'.format(i,low_salary,high_salary)) output = '{}t{}t{}t{}t{}t{}t{}t{}t{}t{}t{}t{}t{}t{}n'.format(id, company, position, education, welfare,low_salary, high_salary, area, companytype,companysize, field, experience, responsibility,requirement) f=codecs.open('51jobanaly.xls','a+') f.write(output) f.close() if __name__=='__main__': main()看看清洗之後的效果
四、資料視覺化與分析
1.各地區招聘公司數量和平均待遇。
用tebleau生成地理圖十分方便強大。可以看出不論是招聘公司的資料還是平均待遇水平主要都是北上廣深杭州佔優勢。成都緊隨其後。
2.公司型別
可以看出招聘的公司主要是民營企業和一些創業公司為主。
3.公司規模和公司領域
可以看出招聘公司的規模在50-500人規模為主,招聘的領域主要是網際網路公司,金融緊隨其後。
4.經驗和學歷要求
學歷這裡主要是大專本科為主,要求不算很高。
5崗位要求和崗位職責
直接生成現在最流行的詞雲,具體程式碼看
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2802459/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 前程無憂崗位資料爬取+Tableau視覺化分析視覺化
- 如何爬取前程無憂python職位資訊Python
- 拉勾網職位資料爬取
- 爬取 boss 直聘技術崗並分析
- 爬取 Boss 直聘網上海區域 PHP 職位資訊資料並分析PHP
- 我爬取了爬蟲崗位薪資,分析後發現爬蟲真香爬蟲
- 12 爬取目標的資料分析
- Python 爬蟲實戰之爬拼多多商品並做資料分析Python爬蟲
- python爬取股票資料並存到資料庫Python資料庫
- 爬取豆瓣電影Top250和資料分析
- Python爬蟲之小說資訊爬取與資料視覺化分析Python爬蟲視覺化
- 網貸資料爬取及據分析
- Python爬取豆瓣電影的短評資料並進行詞雲分析處理Python
- 爬蟲:拉勾自動投遞簡歷+資料獲取爬蟲
- 小白資料分析——Python職位全鏈路分析Python
- 用Python爬取《王者榮耀》英雄皮膚資料並視覺化分析,用圖說話Python視覺化
- 分析公司不同崗位的地位
- Python—Requests庫的爬取效能分析Python
- 前程無憂財報:2012年前程無憂總營收為人民幣3.808億元 同比增長17.3%營收
- 【python】爬取疫情資料並進行視覺化Python視覺化
- 小豬的Python學習之旅 —— 16.再嘗Python資料分析:採集拉勾網資料分析Android就業行情PythonAndroid就業
- 房產資料爬取、智慧財產權資料爬取、企業工商資料爬取、抖音直播間資料python爬蟲爬取Python爬蟲
- python爬蟲利用代理IP分析大資料Python爬蟲大資料
- 寫了個簡單爬蟲,分析 Boss 直聘自動駕駛崗位爬蟲自動駕駛
- Python爬取股票資訊,並實現視覺化資料Python視覺化
- 資料倉儲架構師的崗位職責和崗位要求架構
- 如何用python分析xml獲取資料?PythonXML
- 什麼是爬蟲?Python爬蟲工程師崗位爬蟲Python工程師
- 【php爬蟲】百萬級別知乎使用者資料爬取與分析PHP爬蟲
- PHP爬蟲:百萬級別知乎使用者資料爬取與分析PHP爬蟲
- 如何用 Scrapy 爬取網站資料並在 Easysearch 中進行儲存檢索分析網站
- 北京市政百姓信件分析實戰一 (利用python爬取資料)Python
- Python疫情資料分析,並做資料視覺化展示Python視覺化
- [python爬蟲] Selenium爬取內容並儲存至MySQL資料庫Python爬蟲MySql資料庫
- Python爬取分析豆瓣電影Top250Python
- Python新書上市,強烈推薦!《Python網路資料爬取及分析從入門到精通(爬取篇)》導讀Python新書
- 爬取廣州所有停車場資料(Python)(並行加速版本)Python並行
- 使用Python進行Web爬取和資料提取PythonWeb