├── startApp.cmd ├── config.json ├── package.json ├── README.md └── app.js /startApp.cmd: -------------------------------------------------------------------------------- 1 | node app.js -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "address":"新街口", 3 | "jobarea":"070200", 4 | "startpage":0 5 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "51job", 3 | "version": "0.0.1", 4 | "description": "51job招聘信息下载", 5 | "main": "app.js", 6 | "dependencies": { 7 | "bufferhelper": "^0.2.0", 8 | "async": "^0.2.9", 9 | "cheerio": "^0.12.2", 10 | "iconv-lite": "^0.2.11" 11 | }, 12 | "devDependencies": {}, 13 | "scripts": { 14 | "test": "echo \"Error: no test specified\" && exit 1" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/lzxue/51job" 19 | }, 20 | "keywords": [ 21 | "thinkgis", 22 | "gis", 23 | "招聘信息", 24 | "51job" 25 | ], 26 | "author": "lzxue", 27 | "license": "ISC", 28 | "bugs": { 29 | "url": "https://github.com/lzxue/51job/issues" 30 | }, 31 | "homepage": "https://github.com/lzxue/51job" 32 | } 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ###下载51job招聘信息的爬虫程序 2 | 1.程序使用NodeJS编写,运行安装nodejs 3 | 4 | 2.下载的数据存储在文本文档中以&字符为分隔符,一条招聘信息为一行数据。 5 | 6 | 3.下载51job招聘信息,jobid,companyid 公司简介,岗位简介,经纬度等 7 | 8 | 9 | 10 | [原数据来自51job地图搜索](http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea=010000&industrytype=00&issuedate=9&keywordtype=2&lang=c&stype=3&address=%E4%B8%AD%E5%85%B3%E6%9D%91&radius=0.03&fromType=20) 可根据自身需要修改url参数实现分类下载招聘数据。 11 | 12 | 地区查询一次下载整个地区的数据,程序中默认将查询半径设radius置1000(100000公里)旨在获取该地区的所有数据。但是数据最多返回10w条,向北京这样城市超过10w条数据因此需要设置多个中心点然后去重。 13 | 14 | 下载参数设置在config,json中 15 | 16 | { 17 | 18 | "address":"中关村", //搜索中心 19 | "jobarea":"010000", //搜索城市代码 20 | " startpage":0 //下载起始页码,默认为0 在下载出错时修改该值,改完出错时中断的页码,实现继续上次中断下载 21 | } 22 | 23 | 24 | windows下启动,修改下载参数,双击startapp.cmd 开始下载 25 | 26 | 城市代码表: 27 | 28 | *** 29 | 30 | 北京 31 | 天津 32 | 大连 33 | 沈阳 34 | 长春 35 | 哈尔滨 36 | 石家庄 37 | 38 | 39 | 40 | 41 | 华东地区: 42 | 43 | 上海 44 | 南京 45 | 苏州 46 | 杭州 47 | 宁波 48 | 合肥 49 | 济南 50 | 青岛 51 | 福州 52 | 厦门 53 |
54 | 南昌 55 | 无锡 56 | 常州 57 | 58 | 59 | 60 | 61 | 华南-华中: 62 | 63 | 广州 64 | 深圳 65 | 东莞 66 | 武汉 67 | 长沙 68 | 郑州 69 | 70 | 71 | 72 | 73 | 西北-西南: 74 | 75 | 西安 76 | 成都 77 | 重庆 78 | 昆明 79 | 80 | 81 | 82 | *** 83 | 84 | **codestr即为参数中的**jobarea 85 | 86 | address为 原网站 http://search.51job.com/list/010000%252C00,000000,0000,00,9,99,%2B,0,1.html?lang=c&stype=3&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=01&companysize=99&address=%D6%D0%B9%D8%B4%E5&lonlat=116.323066%2C39.989956&radius=0.05&ord_field=1&list_type=1&confirmdate=9&fromType=10选取该城市的任何一个 中心即可。 87 | 88 | *** 89 | 数据导入excel示例 90 | ![gis](http://thinkgis.qiniudn.com/sinajobxx.png) 91 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var http=require("http"); 2 | var cheerio = require('cheerio'); 3 | var iconv = require('iconv-lite'); 4 | var BufferHelper = require('bufferhelper'); 5 | var async=require("async"); 6 | var fs=require("fs"); 7 | var config=require("./config.json"); 8 | var jobarea=config.jobarea;//城市代码 9 | var address=config.address;//城市中心点 该城市任何一个均可 10 | var startpage=config.startpage;//起始下载页码 11 | var curr_page=0; 12 | var url="http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea="+jobarea+"&funtype=0000&industrytype=00&curr_page="+curr_page+"&keywordtype=2&lang=c&stype=3&postchannel=0000&address="+address+"&radius=10000&fromType=1"; 13 | var fileName=jobarea+address+".txt"; 14 | async.waterfall([ 15 | function(callback){ 16 | pages(url,startpage,function(pages){ 17 | console.log("开始下载地区代号为"+jobarea+"的数据……"); 18 | console.log("共"+pages.length+"页"); 19 | callback(null, pages); 20 | }) 21 | 22 | }, 23 | function(pages, callback){ 24 | // arg1 now equals 'three' 25 | async.eachLimit(pages,5,function(page,cb){ 26 | console.log("正在下载第"+page+"页"); 27 | url="http://search.51job.com/jobsearch/search_result.php?fromJs=1&jobarea="+jobarea+"&funtype=0000&industrytype=00&curr_page="+page+"&keywordtype=2&lang=c&stype=3&postchannel=0000&address="+address+"&radius=10000&fromType=1"; 28 | 29 | getdata(url,function(data){ 30 | 31 | //处理数据 32 | for(var i=0;i