成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

新手向-爬取分析拉勾網(wǎng)招聘信息

yimo / 903人閱讀

摘要:愛寫作者愛寫前言看了很多網(wǎng)站,只發(fā)現(xiàn)獲取拉勾網(wǎng)招聘信息是只用方式就可以得到,應(yīng)當(dāng)是非常簡(jiǎn)單了。在環(huán)境下運(yùn)行通過數(shù)據(jù)爬取篇偽造瀏覽器訪問拉勾網(wǎng)打開瀏覽器,進(jìn)入拉勾網(wǎng)官網(wǎng),右鍵檢查,調(diào)出開發(fā)者模式。

[TOC]

愛寫bug(ID:icodebugs)

作者:愛寫bug

前言:

? 看了很多網(wǎng)站,只發(fā)現(xiàn)獲取拉勾網(wǎng)招聘信息是只用post方式就可以得到,應(yīng)當(dāng)是非常簡(jiǎn)單了。推薦剛接觸數(shù)據(jù)分析和爬蟲的朋友試一下。

在python3.7、acaconda3環(huán)境下運(yùn)行通過

數(shù)據(jù)爬取篇: 1、偽造瀏覽器訪問拉勾網(wǎng)

打開Chrome瀏覽器,進(jìn)入拉勾網(wǎng)官網(wǎng),右鍵->檢查,調(diào)出開發(fā)者模式。

然后在拉勾網(wǎng)搜索關(guān)鍵詞 算法工程師 回車,然后點(diǎn)擊下一頁、下一頁,此時(shí)開發(fā)者工具里的NetworkXHR(表示該網(wǎng)站是以Ajax方式獲取刷新信息的)應(yīng)當(dāng)如下圖(圖中已標(biāo)明了一些關(guān)鍵信息):

每次點(diǎn)擊下一頁圖中XHR下以PositionAjax開頭的請(qǐng)求就會(huì)多一條,圖下方 Form Data 里 page numberpn 就會(huì)增加1,網(wǎng)站地址:https://www.lagou.com/jobs/list_ + 搜索關(guān)鍵詞 city= + 城市名稱 +&cl=false&fromSearch=true&labelWords=&suginput=

當(dāng)然搜索關(guān)鍵詞是中文的話一定要 unicode 轉(zhuǎn)碼。這里我們以關(guān)鍵字為算法工程師,地區(qū)為全國(guó) 為例,所以URL:

轉(zhuǎn)碼前:
https://www.lagou.com/jobs/list_算法工程師?city=全國(guó)&cl=false&fromSearch=true&labelWords=&suginput=
轉(zhuǎn)碼后:
https://www.lagou.com/jobs/list_%E7%AE%97%E6%B3%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=

根據(jù)圖中 Request Headers 構(gòu)造請(qǐng)求頭偽造成瀏覽器訪問:

headers = {
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
        "Referer": "https://www.lagou.com/jobs/list_%E7%AE%97%E6%B3%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput="
    }

然后根據(jù)圖中 Form Data來構(gòu)造表單,只有pn表示的當(dāng)前所在頁數(shù)需要不斷改變,所以 pn 定義一個(gè)變量num表示當(dāng)前頁數(shù):

form_data = {
        "first": "true",
        "pn": num,
        "kd": "算法工程師"
    }

然后試一下:

request=requests.post(url,data=form_data,headers=headers)
print(request.text)

但是尷尬的是這個(gè)時(shí)候post請(qǐng)求獲得的回復(fù)是:

{"status":false,"msg":"您操作太頻繁,請(qǐng)稍后再訪問","clientIp":"182.245.65.138","state":2402}

由于該網(wǎng)站的反爬措施,此時(shí)無論把請(qǐng)求頭構(gòu)造的多好都沒用,哪怕用本地的Cookie。

所以我們采用 Seesion 對(duì)話方式:

s = requests.Session()  # 創(chuàng)建一個(gè)session對(duì)象
s.get(url_start, headers=headers, timeout=3) # 使用session維持同一個(gè)會(huì)話
cookie = s.cookies # 使用該會(huì)話的cookie
response = s.post(url, data=form_data, headers=headers, cookies=cookie, timeout=3)

連接成功!

2、獲取招聘數(shù)據(jù)

然后解析返回的 json 對(duì)象。我們先在開發(fā)者工具里把 PositionAjax 項(xiàng)的 Headers 改到 Preview 看一下Chrome幫我們格式化好的 json 內(nèi)容:

出現(xiàn)了,我們想要的數(shù)據(jù) 在 content -> positionResult -> result , 一共從0到14共15條信息,這對(duì)應(yīng)了網(wǎng)站每頁現(xiàn)實(shí)的信息數(shù)。而最下面還有 totalCount: 16945 這是搜索該關(guān)鍵詞 算法工程師 下的總條目數(shù)??梢愿鶕?jù)這個(gè)算出一共有多頁的信息(16945 / 15)而不是網(wǎng)站上顯示的只有30頁。由于時(shí)間關(guān)系,本次示例只獲取29頁數(shù)據(jù)。本次示例只獲取29頁數(shù)據(jù)。

def parse_page(job_json):
    job_list = job_json["content"]["positionResult"]["result"]
    company_info = []
    for job in job_list:
        job_info = []
        job_info.append(job["companyFullName"])#公司全稱
        job_info.append(job["companySize"])#規(guī)模
        job_info.append(job["financeStage"])#融資情況
        job_info.append(job["district"])#位置
        job_info.append(job["positionName"])#職位
        job_info.append(job["workYear"])#工作經(jīng)驗(yàn)要求
        job_info.append(job["education"])#學(xué)歷
        job_info.append(job["salary"])#工資
        job_info.append(job["positionAdvantage"])#福利待遇
        company_info.append(job_info)#把所有職位情況添加到網(wǎng)頁信息page_info
    return company_info

我們就把每個(gè)公司的各類招聘情況存儲(chǔ)在 company_info 里了。

最后把所有 company_info 匯總在一起:

result = parse_page(job_json)
all_company += result # 所有公司招聘信息匯在一起

接著以CSV格式存儲(chǔ)在本地:

path = "A:Temp"  # 指定csv數(shù)據(jù)存儲(chǔ)路徑
df.to_csv(path + "lagou_algorithm_data.csv", index=False)
print("保存路徑:" + path + "lagou_algorithm_data.csv")

數(shù)據(jù)圖片:


](https://upload-images.jianshu...

數(shù)據(jù)分析篇: 1、數(shù)據(jù)清洗:

? 我們獲得的數(shù)據(jù)都是以字符串形式存儲(chǔ)的,而且像工資(20k—30k)、工作經(jīng)驗(yàn)(3—5年)都是以區(qū)間的形式表現(xiàn)出來的,應(yīng)該求其平均值(工資25k,工作經(jīng)驗(yàn)4年)。另外像工作經(jīng)驗(yàn) 不限、應(yīng)屆畢業(yè)生等,我們應(yīng)該把該公司要求年限 改為0。

pattern = "d+"  # 正則表達(dá)式-匹配連續(xù)數(shù)字
# 統(tǒng)計(jì)每個(gè)公司的平均經(jīng)驗(yàn)要求
lagou_data["平均經(jīng)驗(yàn)"] = lagou_data["經(jīng)驗(yàn)"].str.findall(
    pattern)  # findall查找所有["經(jīng)驗(yàn)"]下的數(shù)字字符串
avg_work_year = []
for i in lagou_data["平均經(jīng)驗(yàn)"]:
    if len(i) == 0:  # 長(zhǎng)度為0則意為著沒數(shù)字,既工作經(jīng)驗(yàn)為不限、應(yīng)屆畢業(yè)生等,即沒有工作經(jīng)驗(yàn)要求
        avg_work_year.append(0)
    else:  # 匹配的是兩個(gè)數(shù)值的工作經(jīng)驗(yàn)區(qū)間 幾年到幾年,,
        year_list = [int(j) for j in i]  # 得到每一個(gè)數(shù)轉(zhuǎn)為int型
        avg_year = sum(year_list)/2  # 求工作區(qū)間的平均值,平均年限
        avg_work_year.append(avg_year)
lagou_data["平均經(jīng)驗(yàn)"] = avg_work_year
# 統(tǒng)計(jì)每個(gè)公司給出的平均工資
lagou_data["平均工資"] = lagou_data["工資"].str.findall(pattern)
avg_salary = []
for k in lagou_data["平均工資"]:
    salary_list = [int(n) for n in k]
    salary = sum(salary_list)/2
    avg_salary.append(salary)
lagou_data["平均工資"] = avg_salary # 新列一項(xiàng)平均工資

存儲(chǔ)的csv文件(你需要先存到本地才能看得到)會(huì)多兩列 平均經(jīng)驗(yàn) 和 平均工資:

2、數(shù)據(jù)可視化:

由于本篇為基礎(chǔ)篇只畫兩個(gè)最簡(jiǎn)單的圖且不做過多渲染美化,數(shù)據(jù)可視化都是一些簡(jiǎn)單的繪圖,只有一個(gè)中文顯示亂碼問題,其他并沒有什么坑,所以不做過多描述。

解決中文亂碼問題:

plt.rcParams["font.sans-serif"] = ["SimHei"]  # 替換sans-serif字體顯示中文
plt.rcParams["axes.unicode_minus"] = False  # 解決坐標(biāo)軸負(fù)數(shù)的負(fù)號(hào)顯示問題
平均工資直方圖:
# 繪制工資頻率直方圖
plt.hist(lagou_data["平均工資"], alpha=0.8, color="steelblue")
plt.xlabel("工資/千元")
plt.ylabel("頻數(shù)")
plt.title("算法工程師平均工資直方圖")
plt.savefig(path+"lagou_algorithm_salary.jpg")  # 指定保存路徑
plt.show()

平均工作經(jīng)驗(yàn)要求直方圖(代碼與上面相似,省略):

學(xué)歷要求餅狀圖:
# 繪制學(xué)歷要求餅圖
count = lagou_data["學(xué)歷"].value_counts()
plt.pie(count, labels=count.keys(), shadow=True,autopct="%2.2f%%")
plt.savefig(path+"lagou_algorithm_education.jpg")
plt.show()

繪制福利待遇詞云:

這里要注意一下,上面設(shè)置的全局顯示字體僅對(duì)matplotlib,有效,所以這里要指定一下字體防止中文亂碼。

# 繪制福利待遇詞云
color_mask = imread(path+"china_map.jpg")
strs = ""
for line in lagou_data["福利"]:
    strs += line  # 連接所有字符串
cut_strs = " ".join(jieba.cut(strs))  # 使用中文分詞jieba,將字符串分割成列表
word_cloud = WordCloud(font_path="C:WindowsFonts微軟雅黑msyh.ttc",mask=color_mask,background_color="white").generate(cut_strs)  # 指定顯示字體避免中文亂碼
word_cloud.to_file(path+"lagou_algorithm_wordcloud.jpg") # 存儲(chǔ)圖片
plt.imshow(word_cloud)
plt.show()

這里詞云背景指定為中國(guó)地圖:

公司福利詞云最終效果圖:

總結(jié):

? 本文面向新手,文中不可避免有一些設(shè)置不合理的問題(數(shù)據(jù)量過少、工資取平均值代表不了實(shí)際情況),但還是可以從一定程度上反映出這個(gè)崗位的待遇和工資水平。

工資絕大部分集中在 2萬到3萬之間真的是相當(dāng)高了。不過要求也不低,在多年的工作經(jīng)驗(yàn)要求下,依然要求碩士畢業(yè)學(xué)歷的公司依然占比 33%。相信過不了多久,本科和碩士的學(xué)歷要求占比就會(huì)換一下位置了。五(六)險(xiǎn)一金是開的最多的福利待遇,算是公司準(zhǔn)則了?,F(xiàn)在公司都流行用彈性工作、氛圍什么的精神福利來招人了么。

所有源代碼及地圖素材:https://github.com/zhangzhe532/icodebugs/tree/master/DataAnalysis/lagou_data_Analysis

注:

文章主要參考:

Python Data Science Handbook(Python數(shù)據(jù)科學(xué)手冊(cè))

pandas API 文檔:https://pandas.pydata.org/pan...

可視化WordCloud: https://www.jianshu.com/p/daa...

matplotlib中文亂碼問題 :https://www.cnblogs.com/hhh54...

網(wǎng)站反爬機(jī)制日新月異,所以本文有較強(qiáng)的時(shí)效性,無法保證您在實(shí)踐時(shí)是否還可行.

所有數(shù)據(jù)、操作僅作學(xué)習(xí)交流,不會(huì)用于商業(yè)用途。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45105.html

相關(guān)文章

  • 區(qū)塊鏈招聘信息爬取分析

    摘要:最近在研究區(qū)塊鏈,閑來無事抓取了拉勾網(wǎng)上條區(qū)塊鏈相關(guān)的招聘信息。拉勾網(wǎng)的反爬蟲做的還是比較好的,畢竟自己也知道這種做招聘信息聚合的網(wǎng)站很容易被爬,而且比起妹子圖這種網(wǎng)站,開發(fā)的技術(shù)水平應(yīng)該高不少。 最近在研究區(qū)塊鏈,閑來無事抓取了拉勾網(wǎng)上450條區(qū)塊鏈相關(guān)的招聘信息。過程及結(jié)果如下。 拉勾網(wǎng)爬取 首先是從拉勾網(wǎng)爬取數(shù)據(jù),用的requests庫。拉勾網(wǎng)的反爬蟲做的還是比較好的,畢竟自己也...

    kelvinlee 評(píng)論0 收藏0
  • 使用php 爬取勾網(wǎng) 的php 招聘信息~

    摘要:拉勾網(wǎng)的爬蟲還是有一定的難度的所以我們今天就爬取試一下其實(shí)并沒有太大的難度只要我們用好分析一下請(qǐng)求就會(huì)其實(shí)沒有什么難度上代碼親測(cè)可用拉鉤代碼 拉勾網(wǎng)的爬蟲還是有一定的難度的 所以我們今天就爬取試一下 其實(shí)并沒有太大的難度 只要我們用好network 分析一下請(qǐng)求 就會(huì)其實(shí)沒有什么難度 上代碼 2019-05-22 親測(cè)可用 拉鉤代碼

    CoderDock 評(píng)論0 收藏0
  • ?Echarts統(tǒng)計(jì)勾網(wǎng)招聘信息(scrapy 爬取

    摘要:因?yàn)楸救嗽诔啥紡氖虑岸?,所以這次爬取的關(guān)鍵詞既是成都,前端。僅僅有這個(gè)是不夠的,因?yàn)槊菜评淳W(wǎng)有反爬蟲,沒有好像得不到數(shù)據(jù)這個(gè)還待論證,至少我這邊是。 前言 showImg(https://segmentfault.com/img/bV1g4S?w=700&h=490); 今天是2018的第一天,首先祝各位小伙伴元旦快樂!又到了新的一年,雖然離春節(jié)還有一段時(shí)間,但是程序狗打工不易啊,不...

    genefy 評(píng)論0 收藏0
  • ?Echarts統(tǒng)計(jì)勾網(wǎng)招聘信息(scrapy 爬取

    摘要:因?yàn)楸救嗽诔啥紡氖虑岸?,所以這次爬取的關(guān)鍵詞既是成都,前端。僅僅有這個(gè)是不夠的,因?yàn)槊菜评淳W(wǎng)有反爬蟲,沒有好像得不到數(shù)據(jù)這個(gè)還待論證,至少我這邊是。 前言 showImg(https://segmentfault.com/img/bV1g4S?w=700&h=490); 今天是2018的第一天,首先祝各位小伙伴元旦快樂!又到了新的一年,雖然離春節(jié)還有一段時(shí)間,但是程序狗打工不易啊,不...

    Jingbin_ 評(píng)論0 收藏0
  • node爬取勾網(wǎng)數(shù)據(jù)并導(dǎo)出為excel文件

    摘要:前言之前斷斷續(xù)續(xù)學(xué)習(xí)了,今天就拿拉勾網(wǎng)練練手,順便通過數(shù)據(jù)了解了解最近的招聘行情哈方面算是萌新一個(gè)吧,希望可以和大家共同學(xué)習(xí)和進(jìn)步。 前言 之前斷斷續(xù)續(xù)學(xué)習(xí)了node.js,今天就拿拉勾網(wǎng)練練手,順便通過數(shù)據(jù)了解了解最近的招聘行情哈!node方面算是萌新一個(gè)吧,希望可以和大家共同學(xué)習(xí)和進(jìn)步。 一、概要 我們首先需要明確具體的需求: 可以通過node index 城市 職位來爬取相關(guān)信...

    dkzwm 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<