boss 直聘爬蟲數(shù)據(jù)分析職位分析

首先說(shuō)明這篇文章的數(shù)據(jù)來(lái)源唬滑,是爬蟲BOSS直聘"數(shù)據(jù)分析師"這一職位信息所得來(lái)的身坐。并且主要分析了數(shù)據(jù)分析師總體薪酬情況邑茄、不同城市薪酬分布琉用、不同學(xué)歷薪酬分布堕绩、北京上海工作經(jīng)驗(yàn)薪酬分布情況、北上廣深對(duì)數(shù)據(jù)分析職位需求量以及有招聘需求的公司所處行業(yè)的詞云圖分析邑时。

1.數(shù)據(jù)采集
2.數(shù)據(jù)清洗與處理
3.數(shù)據(jù)分析

數(shù)據(jù)采集

import requests
from fake_useragent import UserAgent
from lxml import etree
import pymysql
import pymongo
import json
import time
from requests import RequestException

mongo_url = 'localhost'
mongo_db = 'zhaopin'

ua = UserAgent()

class Boss(object):
    def __init__(self):
        self.url = 'https://www.zhipin.com/{}/?query=數(shù)據(jù)分析&page={}'
        self.headers = {'user-agent': ua.random,
           'referer':'https://www.zhipin.com/c101020100/?query=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=1',
           'cookie': ''}
        self.client = pymongo.MongoClient(mongo_url)
        self.db = self.client[mongo_db]
        self.cityList = {'廣州':'c101280100','北京':'c101010100','上海':'c101020100','深圳':'c101280600','杭州':'c101210100','天津':'c101030100','西安':'c101110100','蘇州':'c101190400','武漢':'c101200100','廈門':'c101230200','長(zhǎng)沙':'c101250100','成都':'c101270100','鄭州':'c101180100','重慶':'c101040100'}


    # def get_proxy(self):
    #     PROXY_POOL_URL = 'http://localhost:5555/random'
    #     try:
    #         response = requests.get(PROXY_POOL_URL)
    #         if response.status_code == 200:
    #             return response.text
    #     except ConnectionError:
    #         return None


    def get_one_page(self, url):
        try:
            # proxy = self.get_proxy()
            # proxies = {'http': proxy}
            # print(proxies)
            response = requests.get(url, headers=self.headers)
            if response.status_code == 200:
                return response.text

            return None
        except RequestException:
            print("請(qǐng)求錯(cuò)誤")

    def parse_one_page(self,html):
        html = etree.HTML(html)
        content = html.xpath("http://li/div[@class='job-primary']")

        for con in content:

            pos_name = con.xpath(".//div[@class='job-title']/text()")[0]
            comp_name = con.xpath(".//div[@class='info-company']/div/h3/a/text()")[0]
            salary = con.xpath(".//h3/a/span/text()")[0]
            scale = con.xpath("./div[@class='info-company']//p/text()[last()]")[0]
            education = con.xpath("./div/p/text()[3]")[0]
            industry = con.xpath(".//div[@class='company-text']/p//text()")[0]
            workyear = con.xpath("./div[@class='info-primary']/p/text()")[1]
            location = con.xpath("./div[@class='info-primary']/p/text()")[0]


            item = {'pos_name':pos_name,
                    'comp_name':comp_name,
                    'salary':salary,
                    'scale':scale,
                    'education':education,
                    'industry':industry,
                    'workyear':workyear,
                    'location':location}
            yield item

    def write_to_file(self, item):
        with open('boss.txt', 'a', encoding='utf-8') as f:
            f.write(json.dumps(item, ensure_ascii=False)+'\n')

    def write_to_csv(self, item):
        with open('爬蟲BOSS直聘.txt','a', encoding='utf-8') as file:
            line = str(item['pos_name']) + ',' + str(item['comp_name']) + ',' + str(item['salary']) + ',' + \
                   str(item['scale']) + ',' + str(item['education']) + ',' + str(item['industry']) + ',' + \
                   str(item['workyear']) + ',' + str(item['location']) + '\n'
            file.write(line)

    def save_to_mongo(self, item):
        if self.db['boss'].insert(item):
            print("save successfully")

    def save_mo_mysql(self, item):
        conn = pymysql.connect(host='localhost', user='root', password='', db='test7', port=3306,
                               charset='utf8')
        cur = conn.cursor()
        insert_data = "INSERT INTO boss(pos_name, comp_name, salary, scale, education, industry, workyear,location) VALUES(%s, %s, %s, %s, %s, %s, %s, %s)"
        val = (item['pos_name'], item['comp_name'], item['salary'], item['scale'], item['education'], item['industry'], item['workyear'], item['location'])
        cur.execute(insert_data, val)
        conn.commit()

    def run(self):
        title = u'posName,companyName,salary,scale,education,industry,workyear,location'+'\n'
        file = open('%s.txt' % '爬蟲BOSS直聘', 'w',encoding='utf-8')  # 創(chuàng)建爬蟲拉勾網(wǎng).txt文件
        file.write(title)
        file.close()


        for city in self.cityList.values():
            for i in range(1,11):
                url = self.url.format(city, i)
            # url = self.url.format(1)
                response = self.get_one_page(url)
                for i in self.parse_one_page(response):
                    self.write_to_csv(i)
                time.sleep(3)


if __name__ == '__main__':
    boss = Boss()
    boss.run()

數(shù)據(jù)清洗與處理

image.png

首先看到爬下來(lái)的數(shù)據(jù)地區(qū)location奴紧,太詳細(xì)了,我們只保留市的前兩個(gè)字晶丘。


image.png

可以觀察到工資的格式也有些問題黍氮,是一個(gè)區(qū)間的形式,用函數(shù)把工資清理成最大值浅浮,最小值沫浆,以及平均值的形式便于分析。


image.png

數(shù)據(jù)分析

總體工資分布情況


image.png

不同城市工資分布的情況


image.png

不同學(xué)歷的分布情況


image.png

再仔細(xì)看看詳細(xì)的招聘人數(shù)情況


image.png

現(xiàn)在來(lái)看看北京上海工作經(jīng)驗(yàn)分布情況


image.png

來(lái)看看北上廣深對(duì)數(shù)據(jù)分析類職位的需求量


image.png

做個(gè)招聘的公司所處行業(yè)領(lǐng)域的詞云圖分析


image.png

可以觀察到需求數(shù)據(jù)分析這一職位的主要在互聯(lián)網(wǎng)滚秩,移動(dòng)互聯(lián)網(wǎng)件缸,電子商務(wù),金融等方面叔遂。所以向這些領(lǐng)域求職的話成功率會(huì)大很多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末争剿,一起剝皮案震驚了整個(gè)濱河市已艰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚕苇,老刑警劉巖哩掺,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涩笤,居然都是意外死亡嚼吞,警方通過查閱死者的電腦和手機(jī)盒件,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舱禽,“玉大人炒刁,你說(shuō)我怎么就攤上這事√苤桑” “怎么了翔始?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)里伯。 經(jīng)常有香客問我城瞎,道長(zhǎng),這世上最難降的妖魔是什么疾瓮? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任脖镀,我火速辦了婚禮,結(jié)果婚禮上狼电,老公的妹妹穿的比我還像新娘蜒灰。我一直安慰自己,他們只是感情好漫萄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布卷员。 她就那樣靜靜地躺著,像睡著了一般腾务。 火紅的嫁衣襯著肌膚如雪毕骡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天岩瘦,我揣著相機(jī)與錄音未巫,去河邊找鬼。 笑死启昧,一個(gè)胖子當(dāng)著我的面吹牛叙凡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播密末,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼握爷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了严里?” 一聲冷哼從身側(cè)響起新啼,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刹碾,沒想到半個(gè)月后燥撞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年物舒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了色洞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冠胯,死狀恐怖火诸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涵叮,我是刑警寧澤惭蹂,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站割粮,受9級(jí)特大地震影響盾碗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舀瓢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一廷雅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧京髓,春花似錦航缀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至备图,卻和暖如春灿巧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揽涮。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工抠藕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒋困。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓盾似,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親雪标。 傳聞我的和親對(duì)象是個(gè)殘疾皇子零院,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345