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