Python幫你定制批量獲取智聯(lián)招聘的信息

今天繼續(xù)記錄一下python的一個實例-定制批量獲取智聯(lián)招聘的信息

也是應(yīng)了一個大學(xué)同學(xué)的需求,他在PCB行業(yè)浸淫了10幾年,有了一定的基礎(chǔ)和實力時候,開始準(zhǔn)備自己干一番大事業(yè),祝他一帆風(fēng)順,馬到成功!

前段時間和我講,希望可以快速的獲取到大量的行業(yè)相關(guān)公司的信息。他給我打了個比方,如下圖,在智聯(lián)招聘上面搜索電子工程師后,會有好多相關(guān)職位、公司信息,挨個點進去,就能獲取到紅框內(nèi)的內(nèi)容。

但是,挨個點,復(fù)制-粘貼,這個效率太低了。

他希望說,快速批量爬取所需要的信息,并且保存下來。

說實話,這個功能需求很簡單,永恒君在網(wǎng)上也看到了好多的大神都寫過相關(guān)的教程和代碼,比這個需求更高級、更完善。

但是,高級、功能多意味著代碼量也更大,需要學(xué)習(xí)和調(diào)試的工作量也是非常大。

本著解決問題的原則,永恒君借鑒了一下大神的教程和思路,寫了一個簡單粗暴,但是有效的代碼。

先上效果,以“深圳”、“l(fā)ayout”這個關(guān)鍵詞為例,搜索部分結(jié)果如下:

程序爬取后結(jié)果如下圖:

操作過程視頻:


主要是把問題按如下分解:

1、獲取職位鏈接目錄

即網(wǎng)站搜索關(guān)鍵詞之后,出來的職位列表。將職位名稱,鏈接以字典的形式保存到url_list數(shù)組當(dāng)中。

def?get_urls(start,cityname,jobname):#獲取職位的鏈接目錄
????url_list=[]#保存職位鏈接
????for?i?in?range(start):????????
????????url?=?'https://fe-api.zhaopin.com/c/i/sou?start='+str(i*90)+'&pageSize=90&cityId='+str(cityname)+'&salary=0,0&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw='+parse.quote(str(jobname))+'&kt=3'??????????
????????#start設(shè)置翻頁,默認(rèn)起始頁為0,第二頁為90,第三頁為180,以此類推;
????????#cityname為城市名,可用代碼,也可以用城市首字母,如深圳,'sz'。建議用代碼,更準(zhǔn)確,如全國-489,北京-530,上海-538,深圳-765,廣州-763,天津-531。
????????#jobname為職位名,中英文都可以????????
????????try:
????????????rec?=?requests.get(url=url,headers=headers)
????????????if?rec.status_code?==?200:
????????????????j?=?json.loads(rec.text)
????????????????results?=?j.get('data').get('results')????????????????
????????????????for?job?in?results:
????????????????????url_dict?=?{
????????????????????????????????'positionURL':job.get('positionURL'),#公司職位鏈接
????????????????????????????????'Job_name':job.get('jobName')#職位名稱?
????????????????????}?

????????????????????url_list.append(url_dict)
????????except:
????????????print("maybe?error")
????????????pass????????
????return?url_list

2、獲取職位的詳細信息

即模擬點擊上面獲取的職位鏈接,提取所需要的信息,如公司名稱、職位名稱職位描述、工作地點薪資等等,以字典的形式保存。

def?get_job(url):#獲取職位的詳細信息

????try:
????????res?=?requests.get(url)
????????html?=?res.text????
????????soup?=?bs(html,?"lxml")????

????????job_dict?=?{"company_name":soup.find_all('a',class_="company__title")[0].text,#公司名稱
????????????????????"job_name":soup.find_all('h3',class_="summary-plane__title")[0].text,#職位名稱
????????????????????"job_des":soup.find_all('div',class_="describtion__detail-content")[0].text,#職位描述????????????????
????????????????????"job_location":soup.find_all('span',class_="job-address__content-text")[0].text,#職位工作地點????????????????
????????????????????"salary":soup.find_all('span',class_="summary-plane__salary")[0].text,#薪資

????????????}
????????return?job_dict
????except:
????????pass
????????return?None

3、將獲取到的信息保存到excel表當(dāng)中

f?=?xlwt.Workbook()?#創(chuàng)建工作簿
sheet1?=?f.add_sheet(u'jobs',cell_overwrite_ok=True)?#創(chuàng)建sheet,可寫
headers?=?(['公司名稱'],['職位名稱'],['職位描述'],['工作地點'],['薪資'],['職位鏈接'])#寫表頭

j=0
for?each_header?in?headers:
????sheet1.write(0,j,each_header)#參數(shù)對應(yīng)行?列?值
????j=j+1

#寫內(nèi)容
hang=1
lie=0

for?i?in?get_urls(pages,city,job_keyword):#逐行寫入內(nèi)容
????job?=?get_job(i['positionURL'])#job_dic
????print("正在獲取:?"+job['job_name']+"?職位信息")
????print('正在寫入信息...')
????sheet1.write(hang,lie,job['company_name'])#參數(shù)對應(yīng)行?列?值,寫入公司名稱????
????sheet1.write(hang,lie+1,job['job_name'])#寫入職位名稱
????sheet1.write(hang,lie+2,job['job_des'])#寫入職位描述
????sheet1.write(hang,lie+3,job['job_location'])#寫入工作地點
????sheet1.write(hang,lie+4,job['salary'])#寫入薪資
????sheet1.write(hang,lie+5,i['positionURL'])#寫入職位鏈接
????print('寫入完畢')
????hang=hang+1

f.save('jobs.xls')#保存文件

4、簡單優(yōu)化代碼

上面三部分組合起來程序已經(jīng)可以運行了,為了更好的使用,做了一點點的優(yōu)化。

給程序添加一些請求的,目的是模擬人工真實訪問,迷惑網(wǎng)站服務(wù)器。

headers?=?{
????????'User-Agent':'Mozilla/5.0?(Windows?NT?10.0;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/63.0.3239.132?Safari/537.36',
????????'Host':?'fe-api.zhaopin.com',
????????'Origin':'https://sou.zhaopin.com',
????????'Referer':'https://sou.zhaopin.com/?p=3&jl=765&sf=0&st=0&kw=pcb&kt=3',
????????'Accept':?'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
????????'Accept-Encoding':?'gzip,?deflate,?br',
????????'Accept-Language':?'zh-CN,zh;q=0.9'
????????}

添加一些和程序互動的界面

city?=?input("請輸入查找的城市id,如全國-489,北京-530,上海-538,深圳-765,廣州-763,天津-531:")
job_keyword?=?input("請輸入查找的職位關(guān)鍵詞,如pcb:")
pages?=?int(input("請輸入需要查找的頁數(shù)(1-9):"))

print("正在獲?。?"+job['job_name']+"?職位信息")
print('正在寫入信息...')
print('所有信息寫入完畢')

代碼簡單,主要是給新人以解決問題、實用為主。

后續(xù)如果有必要當(dāng)然可以添加諸如多線程、圖形化界面、防反爬、封裝以及擴展到其他招聘網(wǎng)站等功能,可以再進一步提高效率。

請大咖們多多指點!

歡迎有需要的伙伴測試交流,wx公號后臺回復(fù)「招聘」即可。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容