要看一種技術在本地的流行程度,最簡單的就是找招聘網站按關鍵詞搜索。php
好比今天查到的職位數量是vue 1296個,react 1204個,angular 721個。國際上比較流行的是react,本地市場中vue倒更受歡迎。因此學習的話能夠先考慮前兩個。前端
好比咱們能夠功利化一點:某些語言的薪資中值比較低,或者某些語言職位數比較少,那麼咱們作作比較,去學點別的嗎。vue
分爲兩步,第一步爬取並保存成文本文件;第二步讀取和解析文本文件顯示折線圖。(數據存在本地更好,省得頻繁扒着玩,對方網站恨我。因此分爲兩步)python
第一個文件:react
按關鍵詞,扒取頁面 https://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京 json
按薪資區間分爲幾擋:1~6000, 6001~12000, 12001~20000, 20001~30000, 30001~99999app
# -*- coding: utf-8 -*- # coding=utf-8 import requests import bs4 import urllib def getPageTxt(url): headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'} r = requests.get(url, headers=headers) soup = bs4.BeautifulSoup(r.content.decode("utf-8"), "lxml") mylist = soup.select('.search_yx_tj em') counts = mylist[0].text return counts def getUrl(word, moneymin=0, moneymax=99999): url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京&kw=" url += word + "&p=1&isadv=0&isfilter=1&sf=" + str(moneymin) + "&st=" + str(moneymax) return url # 1、查詢關鍵詞 word000 = "前端,python" #限最多6個值,中間半角逗號分隔 #word000 = "前端,python,php" words = word000.split(",") # 2、工資區間(最小值爲0,最大值爲99999) moneys = [0, 6000, 12000, 20000, 30000, 99999] money_min = list(map(lambda x: x+1, moneys[:-1])) #[1, 6001, 12001, 20001, 30001] money_max = list(map(lambda x: x, moneys[1:])) #[6000, 12000, 20000, 30000, 99999] print(money_min) print(money_max) # 3、url拼串,扒取頁面,生成字典文件 ''' 字典文件的結構爲:(counts是職位數量,startmoney是起薪。這兩個list,後面將用於生成折線圖) [ {'key': '前端', 'counts': [1105, 4485, 4394, 1549, 393], 'startmoney': [1, 6001, 12001, 20001, 30001]}, {'key': 'python', 'counts': [700, 2945, 4467, 2454, 984], 'startmoney': [1, 6001, 12001, 20001, 30001]} ] ''' ulist = [] for word in words: li = {} counts = [] for k in money_min: idx = money_min.index(k) # 索引 url = getUrl(word, money_min[idx], money_max[idx]) # 拼串 counts.append(int(getPageTxt(url))) # 扒取 ,並轉換爲數字,存入counts列表 li["key"] = word li["counts"] = counts li["startmoney"] = money_min ulist.append(li) print(ulist) f = open("counts000.txt", "w") f.write(str(ulist)) f.close()
第二個文件:學習
注意這裏有個坑:json載入的字符串,必須是雙引號網站
# -*- coding: utf-8 -*- # coding=utf-8 import json f = open('counts000.txt', 'r+') ulliststring = f.read() f.close() ulliststring = ulliststring.replace("'", '"') # 注意這裏有個坑!! json的標準格式:要求必須 只能使用雙引號做爲鍵 或者 值的邊界符號,不能使用單引號,並且「鍵」必須使用邊界符(雙引號) ullist = json.loads(ulliststring) import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams['font.sans-serif'] = ['SimHei']# 爲了能顯示中文(而不是顯示一個框) matplotlib.rcParams['font.family']='sans-serif' matplotlib.rcParams['axes.unicode_minus'] = False # 爲了能顯示負號(而不是顯示一個框) colornames = ['#ff0000', '#ccee00', '#00aa00','#0000ff', '#9900ff', '#ff0099'] plt.title('bj薪資、職位數量折線表', color='#ff33a0') plt.xlabel('薪資區間') # 設置X座標軸標題 plt.ylabel('職位數量') # 設置Y座標軸表 plt.xlim(0, 35000) # 設置座標軸的範圍 plt.ylim(0, 5000) # plt.xticks([2,4])#設置x軸的標籤間隔 # plt.yticks([4,16])#設置y軸的標籤間隔 i = 0 for li in ullist: x = li["startmoney"] y = li["counts"] plt.plot(x, y, colornames[i]) i += 1 plt.show()
寫在後面:url
可能會有些小bug,不作處理了:
好比colornames顏色我只設了6個,y軸最大值才設了5000,
折線圖的x軸,表明的是起薪點。理想的應該是薪資區間的中值。
..