爬取某招聘網站的信息


沒做過招聘,我不清楚是否存在這種情況:公司不准備招人,但是卻在招聘網站上掛了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")

 


免責聲明!

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



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