• 爬取某招聘网站的信息


    没做过招聘,我不清楚是否存在这种情况:公司不准备招人,但是却在招聘网站上挂了N个岗位,给人一种正在招聘的假象。。。为了避免这种情况,我写了一个脚本,统计某一关键词的岗位数量和具体岗位信息,然后每天随机运行一下该脚本,如果数量增加,说明有新岗位出现,这家公司“真的”在招聘!

    脚本有几个注意点:1. 编码有些特殊;2. 51job每页只展现50条搜索记录,所以涉及到翻页。

    #!/usr/bin/env python
    # coding: utf-8
    import requests
    import re
    import csv
    import datetime
    import sys
    # 51job使用gbk编码
    reload(sys)
    sys.setdefaultencoding('gbk')
    
    head = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36" }
    time = datetime.datetime.now()
    current = time.strftime('%Y-%m-%d %H_%M_%S')
    
    # 网站每页只能展示50条记录, 所以要获取页数; 这里得到的页数比正常的多2页,因为后续函数用到range处理起来特殊点
    def getPage(keyword):
        url = "http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=080200%%2C00&funtype=0000&industrytype=00&" 
              "keyword=%s&keywordtype=2&lang=c&stype=2&postchannel=0000&fromType=1&confirmdate=9" % keyword
        r = requests.get(url, headers=head)
        r.encoding = r.apparent_encoding
        content = r.text
        regexp_count = ur"共(.*?)条职位"
        pattern_count = re.compile(regexp_count, re.M)
        result_count = re.findall(pattern_count, content)
        page_count = int(result_count[0]) / 50 + 2
        return result_count, page_count    # return ([u'128'], 4)
    
    # 获取职位数,职位名称,公司名称
    def getJobByKeyword(keyword):
        result_details = []
        for p in range(1,getPage(keyword)[1]):
            # 此处第一行有两个连续的百分号,我理解第一个起到转义的作用
            url = "http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=080200%%2C00&funtype=0000&industrytype=00&" 
                  "keyword=%s&keywordtype=2&" 
                  "curr_page=%d&lang=c&stype=2&postchannel=0000&fromType=1&confirmdate=9" % ( keyword, p )
            r = requests.get(url, headers=head)
            # r.encoding = ISO-8859-1, 好奇怪的编码,查了资料加了下面这行确保结果不会出现乱码
            r.encoding = r.apparent_encoding
            content = r.text
            regexp_details = r'<span>s+<a target="_blank" title="(.*?)" href="(.*?)".*?title="(.*?)"'
            pattern_details = re.compile(regexp_details, re.S)
            result_details.append(re.findall(pattern_details, content))
        return result_details    # [ [(u'岗位名称1', u'公司名称1, url1), ..., (u'岗位名称50', u'公司名称50', url50)], [], [], ... ]
    
    # 将职位名称,公司名称输出到文件
    def exportAsCsv(keyword):
        print keyword + u"岗位数:" + getPage(keyword)[0][0]
        csvfile = file(current + "_" + keyword + ".csv", 'ab')
        writer = csv.writer(csvfile)
        for item1 in getJobByKeyword(keyword):
            for item2 in item1:
                writer.writerow([item2[2], item2[0], item2[1]])
    
    exportAsCsv("microsoft")
  • 相关阅读:
    【转】shell脚本常用命令
    【转】应该知道的Linux技巧
    背景颜色变成豆沙绿色~
    缓冲区溢出攻击
    恶意代码简介
    atitit.  web组件化原理与设计
    Atitit.vod 视频播放系统 影吧系统的架构图 架构体系 解决方案
    Atitit.跨语言异常转换机制 java c# php到js的异常转换
    atitit.React   优缺点 相比angular react是最靠谱的web ui组件化方案了
    Atiti。流量提升软件设计大纲规划 v1 q45
  • 原文地址:https://www.cnblogs.com/IvanChen/p/5581044.html
Copyright © 2020-2023  润新知