zoukankan      html  css  js  c++  java
  • 爬虫工程师的月薪如何?

    链接分析

    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()

     数据展示

  • 相关阅读:
    2021“MINIEYE杯”中国大学生算法设计超级联赛2
    2021“MINIEYE杯”中国大学生算法设计超级联赛1
    2021牛客暑期多校训练营3
    2021牛客暑期多校训练营1
    对点分治的一些新理解
    使用均摊分析证明Splay复杂度
    从实际项目中学设计模式:策略模式与模板模式的应用
    ueditor编辑器html模式下无法保存内容
    记录一次项目开发中遇到的问题
    加解密代码
  • 原文地址:https://www.cnblogs.com/start20180703/p/10365514.html
Copyright © 2011-2022 走看看