• 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪


    #通过输入的关键字,爬取北京地区某岗位的平均月薪
    # -*- coding: utf-8 -*-
    import re
    import requests
    import time
    import lxml.html
    from bs4 import BeautifulSoup
    #------------------------------------------------定义函数:获取指定网页北京地区所有相关职位的月薪---------------------
    def getSalary(url):
        headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
        resp=requests.get(url,headers=headers)
        time.sleep(5)
        web_data = BeautifulSoup(resp.content, "lxml")
        firstlist=web_data.find_all('td')
        salarylist1=[]
        salarylist2=[]
        for i in firstlist:
            if 'zwyx' in str(i) and '面议' not in str(i):    #提取职位月薪,并存入salarylist1列表,月薪为面议时不统计
                salarylist1.append(str(i))                       #将列表转为字符串,并用正则表达式提取字符串里面的数字(即月薪),并存入salarylist2,此时列表中元素格式还是字符串
        salaryliststr='+'.join(salarylist1)
        reeq=re.compile(r'(w[0-9]+)w*')
        salarylist2=re.findall(reeq,salaryliststr)
        salarylist2=map(float,salarylist2)                       #将字符串格式的月薪转为float型
        return salarylist2                                      #以数字列表形式返回指定网页所有统计到的月薪
    #-------------------------定义函数:统计智联招聘网站北京地区,招聘岗位名称包含keyword关键字所有岗位的平均月薪-------------
    def getAverageSalary(keyword):
        url=r'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC&kw='+keyword+'&sm=0&p=1&kt=3'  #包含关键字的网站名
        headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36'}
        pagelist=[]
        salarylist=getSalary(url)         #提取第一页的招聘岗位月薪信息,并存入salarylist列表
        print salarylist
        while True:
            resp=requests.get(url,headers=headers)
            time.sleep(5)
            if resp.status_code!=200:
                break
            resp=resp.content
            reg=r'a href="(.*?)" class="next-page">下一页</a>'         #用于获取下一页地址的正则表达式
            reg=re.compile(reg)
            page=re.findall(reg,resp)
            if page!=[]:                                                      #如果未到检索的最后一页
                page1=re.split(r'href="',page[0])                             #提取当前页的下一页的网址,并赋给url
                if re.search('http',page1[-1]):
                    pagelist.append(page1[-1])
                    url=page1[-1]
                    salarylist2=getSalary(url)
                    #print 'salarylist',salarylist
                    salarylist.extend(salarylist2)                          #将新提取的月薪信息存入salarylist列表
                    #print 'salarylist2',salarylist
                else:
                    break
            else:                                                              #已到检索到的最后一页,结束循环
                break
        salarylist=map(float,salarylist)
        if len(salarylist)!=0:
            averageSalary=sum(salarylist)/len(salarylist)
            return averageSalary,pagelist
        else:
            print '统计到的月薪列表为0,请检查网页是否正确!'
            return 0,[0,]
    
    averageSalary,pagelist=getAverageSalary('CAE')     #爬取关键字为 CAE 的岗位平均月薪
    print 'AverageSalary:',averageSalary
    

      

  • 相关阅读:
    作业12-流与文件
    作业11-多线程
    作业10-异常
    作业09-集合与泛型
    作业08-集合
    maven引入本地jar包的方法
    git删除.idea 忽略上传.idea
    JAVA中如何实现序列化,有什么意义?
    win10系统端口被占用怎么查看
    SpringBoot(一) 添加定时任务
  • 原文地址:https://www.cnblogs.com/huzimie/p/5855567.html
Copyright © 2020-2023  润新知