幫你尋找你想要的崗位!
現在很多人都習慣在招聘網站搜索崗位,但五花八門的崗位、薪資、崗位要求使你一個個對比浪費大量不必要的時間。作爲程序員當然要解決繁瑣的問題,所以我們要方便快捷找到自己想要的崗位就要進行採集數據和進行分析了。
我們需要做好以下準備:
要安裝好以下庫:requets、lxml、pymysql、matplotlib、jieba、wordcloud
這次我們將參考Boss直聘下的招聘信息進行分析:
我們需要參考的數據有:
崗位名、薪資、公司名、公司信息、詳細要求、發佈時間
但是我們發現職位描述的詳細信息是動態生成的,我們需要通過抓包對抓到的動態頁面的url地址並且進行解析構造。
以下是我們抓到的包的請求:
發現url地址後面一傳字符串在前端界面上其實是具有的,所以可以自己進行拼接訪問獲取動態頁面的信息。
首先,採集需要的信息並存入數據庫:
注意:要提取下一頁的地址直到結束
import requests
from lxml import etree
from queue import Queue
import pymysql
db = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='biquge', charset='utf8')
cursor = db.cursor()
data = "insert into jobrequire_copy(job_name,job_salary_max,job_salary_min,job_company,job_needs,company_detail,time,more_detail) values(%s,%s,%s,%s, %s,%s, %s,%s)"
a =True
url="https://www.zhipin.com/c100010000/?query=java&page=1&ka=page-1"
#進入Boss直聘進行搜索全國你想要的職位獲取第一頁的url地址
#一直訪問直到沒有下一頁地址
while a:
header = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'
}
rep = requests.get(url, headers=header)
html = etree.HTML(rep.content.decode("utf8"))
print(html)
lists = html.xpath("//div[@class='job-list']/ul/li")
com = []
for list in lists:
job_name = list.xpath(".//div[@class='job-title']/text()")[0]
job_salary = list.xpath(".//span/text()")[0]
mina = int("".join(job_salary.split("-")).split("k")[0]) * 1000
maxa = int("".join(job_salary.split("-")).split("k")[1]) * 1000
job_company = list.xpath("./div/div[@class='info-company']//h3/a/text()")[0]
job_needs = list.xpath("./div/div[@class='info-primary']/p/text()")[0]
company_detail = list.xpath("./div/div[@class='info-company']//p/text()")[0]
time = list.xpath("./div/div[@class='info-publis']//p/text()")[0]
# 獲取動態詳細的信息
detail = list.xpath("./div/a/@data-url")[0].split("jobId")[1]
url = "https://www.zhipin.com/view/job/card.json?jid" + detail
rep = requests.get(url, headers=header)
a = eval(rep.content.decode())['html']
html2 = etree.HTML(a)
detail_message = "".join(html2.xpath("//div[@class='detail-bottom-text']/text()")).strip()
try:
#插入數據庫
cursor.execute(data, (job_name, str(maxa), str(mina), job_company, job_needs, company_detail, time, detail_message))
db.commit()
except:
db.rollback()
#獲取下一頁的url地址
a="".join(html.xpath("//div[@class='page']/a[@ka='page-next']/@href"))
if a!="javascript:;":
url = "https://www.zhipin.com" +a
print(url)
else:
a=False
db.close()
保存到數據庫的信息
相比一個個頁面點開看已經很方便了,但是還不是很直觀。所以我們要對數據進行可視化的操作
通過不同崗位名的薪資範疇進行對比
import pymysql
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
db = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='biquge', charset='utf8')
cursor = db.cursor()
sql ='select job_salary_min, job_salary_max,job_name ,more_detail from jobrequire '
name =[]
min=[]
max=[]
plt.figure(figsize=(50,8),dpi=100)
try:
cursor.execute(sql)
result =cursor.fetchall()
for x in result:
name.append(x[2])
min.append(int(x[0])/10000)
max.append(int(x[1])/10000)
except:
print("no")
plt.scatter(name,min,color='green',label='最低工資')
plt.scatter(name,max,color='red',label='最高工資')
plt.xlabel("崗位名")
plt.ylabel("工資/10k")
plt.locator_params('y',nbins=20)
plt.legend(loc = 'best')
plt.xticks(rotation=45)
plt.show()
結果展示:
我們還可以對所有崗位提出的要求進行進一步的分析,看看到底哪些技術是都必要具備的呢
詞雲分析
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import pymysql
import jieba
detail=[]
db = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='biquge', charset='utf8')
cursor = db.cursor()
sql ='select more_detail from jobrequire '
plt.figure(figsize=(400,10),dpi=100)
try:
cursor.execute(sql)
result =cursor.fetchall()
for x in result:
detail.append(x[0])
except:
print("no")
a = "".join(detail)
mytext="".join(jieba.cut(a))
wc = WordCloud( background_color = 'white', # 設置背景顏色
font_path = 'C:/Windows/Fonts/msyhbd.ttc', # 設置字體格式,如不設置顯示不了中文
width = 2000,
height = 1000).generate(mytext)
plt.imshow(wc, interpolation="bilinear")
plt.axis('off')
plt.show()
結果展示:
是不是很方便很容易!快點自己動手搜索分析你喜歡的崗位吧!
歡迎交流學習!如有錯誤請大方指出,不要吝嗇你的喜歡!