爬蟲工程師的月薪如何?


鏈接分析

1、不同的搜索關鍵字 的搜索鏈接分析:

  搜索python工程師:https://sou.zhaopin.com/?jl=538&kw=python工程師&kt=3

  搜索java工程師:https://sou.zhaopin.com/?jl=538&kw=java工程師&kt=3

  對比結果:兩個鏈接只有 kw= 后的內容有所不同。kw 后的內容就是搜索的關鍵詞,你就可以根據查詢內容構造自己的鏈接。

2、不同頁面的搜索鏈接分析

  中間頁的鏈接:https://sou.zhaopin.com/?p=2&jl=538&kw=java工程師&kt=3

  最后一頁的鏈接:https://sou.zhaopin.com/?p=12&jl=538&kw=java工程師&kt=3

  對比結果:不同頁面的鏈接,只有第一頁沒有 p= 參數。其余頁面只是 p= 后的參數不同。

 

頁面的渲染

我們所看到的網頁是瀏覽器將 HTML、CSS、JavaScript 代碼加工后呈現到屏幕上的。因此,為了獲得完整的內容,爬蟲也需要重復這一過程。

在默認情況下,爬蟲獲取到的是未經渲染的 HTML、JavaScript、CSS 代碼。

渲染頁面

在獲取的結果上調用reader函數,渲染頁面。

from requests_html import HTMLSession

session=HTMLSession()

firstPage=session.get('https://sou.zhaopin.com/?jl=538&kw=python工程師&kt=3')
firstPage.html.render()
print(firstPage.html.text)

 

數據提取

查看網頁源代碼,寫正則表達式

比如薪資的源代碼是:<p class="contentpile__content__wrapper__item__info__box__job__saray">10K-15K</p>

其正則表達式可以寫成:<p.*>(\d+)K-(\d+)K</p>

 

再比如下一頁的源代碼是:<button disabled="disabled" class="btn soupager__btn soupager__btn--disable">下一頁</button>

其正則表達式可以寫成:<button.* disabled="disabled".*>下一頁</button>,你可以用這個正則來判斷是不是最后一頁。

from requests_html import HTMLSession
import re

session=HTMLSession()
first_page=session.get('https://sou.zhaopin.com/?jl=489&kw=%E7%88%AC%E8%99%AB%E5%B7%A5%E7%A8%8B%E5%B8%88&kt=3')
first_page.html.render(sleep=10)
#薪資水平源代碼正則表達式
salary_element='<p.*>(\d+)K-(\d+)K</p>'
salary=re.findall(salary_element,first_page.html.html)
#最后一頁 下一頁 按鈕正則表達式
disabled_button_element='<button.* disabled="disabled".*>下一頁</button>'
disabled_button=re.findall(disabled_button_element,first_page.html.html)

 

成功匹配薪資水平和 下一頁 按鈕后,嘗試提取所有 python工程師的薪資水平 並利用 matplotlib 繪圖展示。

完整代碼如下:

from requests_html import HTMLSession
import re
from matplotlib import pyplot as plt

salary_element='<p.*>(\d+)K-(\d+)K</p>'
salary=[]
disabled_button_element='<button.* disabled="disabled".*>下一頁</button>'
#disabled_button_element='<button class="btn soupager__btn soupager__btn--disable" disabled="disabled">下一頁</button>'
disabled_button=None
p=1

while not disabled_button:
    print('正在爬取第'+str(p)+'')
    url='https://sou.zhaopin.com/?p='+str(p)+'&jl=530&kw=python工程師&kt=3'
    session=HTMLSession()
    page=session.get(url)
    page.html.render(sleep=3)
    # 提取出薪資,保存為形如 [[10,20], [15,20], [12, 15]] 的數組
    salary+=re.findall(salary_element,page.html.html)
    # 判斷頁面中下一頁按鈕還能不能點擊
    disabled_button=re.findall(disabled_button_element,page.html.html)
    p=p+1
    session.close()

#求出每家公司的平均工資
salary=[(int(s[0])+int(s[1]))/2 for s in salary]
low_salary,middle_salary,high_salary=[0,0,0]
for s in salary:
    if s<=15:
        low_salary+=1
    elif s>15 and s<=30:
        middle_salary+=1
    else:
        high_salary+=1

# 調節圖形大小,寬,高
plt.figure(figsize=(16,19))

labels=[u'<15K',u'15K-30K',u'>30K']
data=[low_salary,middle_salary,high_salary]
plt.pie(data,labels=labels)

plt.axis('equal')
plt.legend()
plt.show()

 

 數據展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM