node 爬虫 实战 - 爬取拉勾网职位数据,主要想把数据用于大数据学习,到时候大数据分析可以自己分析一下职位的情况,和比较一些我现在的职位在深圳乃至全国的开发人员水平。

涉及到的技术栈:node.js ,mongoDB , express

源码下载:https://gitee.com/draven_lee/node-spider ,如果有帮助到你,不需要打赏,欢迎给star。

这个爬虫功能有点简单,仅供学习参考。

  1. 爬取lagou.com首页的menu菜单的url,并且把menu的前30页url保存进去爬虫队列中,之后沿着队列的url,把需要的数据提取出来。
  2. 爬取的过程中,发现,如果太频繁的和没有用户的登录态,会被和谐到其他页面去,应该是拉勾网做了防爬虫机制,所以我把爬取的速度放慢,加上模拟的登录态,可以成功爬取到数据。不过按照这个爬取有点慢的速度,我爬了四天四夜,爬了10W+条职位数据。

废话不说,先上代码。

var express = require('express');
var MongoClient = require('mongodb').MongoClient;
const request = require('superagent');
var url = "mongodb://localhost:27017/draven";
var router = express.Router();
var cheerio = require('cheerio');
var Crawler = require("crawler");//爬取 数据
router.get('/crawlData', function(req, res, next) {var url = "mongodb://localhost:27017/draven";var menuList = [];var urlList = []var location = '深圳';MongoClient.connect(url, function(err, db) {if (err) throw err;var dbo = db.db("draven");var c = new Crawler({preRequest: function(options, done) {// 'options' here is not the 'options' you pass to 'c.queue', instead, it's the options that is going to be passed to 'request' moduleconsole.log(options.uri);// when done is called, the request will startdone();},jQuery: true,       //是否用 cheerio 的jQuery语法rateLimit:25000,    //爬取速度 25秒 爬一次maxConnections : 1, //最大爬取并发量 1headers:{           //模拟真实用户浏览器状态'Cookie':'index_location_city='+encodeURI(location)+'user_trace_token=20181127172617-5d56fc60-618b-4486-9762-21efad3c49df; JSESSIONID=ABAAABAAAFCAAEG70DFEA8B139FF80287ABDF2F4C137946; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; index_location_city=%E6%B7%B1%E5%9C%B3; _ga=GA1.2.405959562.1543310779; _gid=GA1.2.577762828.1543310779; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1543310402,1543310779; LGSID=20181127172618-7ef404ed-f226-11e8-80e4-525400f775ce; PRE_UTM=; PRE_HOST=; PRE_SITE=; PRE_LAND=https%3A%2F%2Fwww.lagou.com%2F; LGUID=20181127172618-7ef406c2-f226-11e8-80e4-525400f775ce; _gat=1; TG-TRACK-CODE=index_navigation; SEARCH_ID=88db5c7fa2464090a6dd7041f35074ba; X_HTTP_TOKEN=492369107a1a20441020ab9b771f2f6d; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%221675489482d244-0f3ef5ad6aef94-4313362-2073600-1675489482e36f%22%2C%22%24device_id%22%3A%221675489482d244-0f3ef5ad6aef94-4313362-2073600-1675489482e36f%22%7D; sajssdk_2015_cross_new_user=1; ab_test_random_num=0; _putrc=69D503B669D896FC123F89F2B170EADC; login=true; hasDeliver=0; gate_login_token=33f3414d87f12e09e089b3b6daf10134f0a5ebf49fad63dfd9b8bc4e3a4f162b; unick=hello; LGRID=20181127174101-8d501f2b-f228-11e8-8c21-5254005c3644; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1543311662','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',},callback : function (error, res, done) {if(error){console.log(error);done();}else{var $ = res.$;var jobList = []console.log($('title').text())$('.con_list_item').each(function (idx, item) {var $item = $(item);jobList.push({name: $item.find('.position_link').find('h3').text(),address: $item.find('.add').find('em').text(),company: $item.find('.company_name').find('a').text(),companyLink: $item.find('a').attr('href'),companyImg: $item.find('.com_logo').find('img').attr('src'),money: $item.find('.money').text(),label:$item.find('.list_item_bot').find('span').text(),welfare:$item.find('.li_b_r').text()});});try {console.log('c.queueSize',c.queueSize);console.log('jobList',jobList.length)if(jobList.length > 0 ){//保存到数据库中dbo.collection("job").insertMany(jobList, function(err, res) {if (err) throw err;console.log('job 数据导入成功!');// db.close();})}done();}catch(e){console.log(e);done();}}}});//爬取首页的menu的数据c.queue([{uri: 'https://www.lagou.com/',headers:{'Set-Cookie':'index_location_city='+encodeURI(location),'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36','JSESSIONID':'ABAAABAAAGFABEFC5E29AF672C4DAF0B10AEE494D83FD62','login':true},// The global callback won't be calledcallback: function (error, res, done) {if(error){console.log(error);}else{var $ = res.$;$('.menu_sub a').each(function (idx, element) {var $element = $(element);menuList.push({name: $element.text(),tjId: $element.attr('data-lg-tj-id'),// tjIdName:changeName($element.attr('data-lg-tj-id')),tjNo:$element.attr('data-lg-tj-no'),tjCid:$element.attr('data-lg-tj-cid'),link:$element.attr('href'),});//组装menu前30页的url for(var i = 1 ;i<=30 ;i++){urlList.push($element.attr('href')+i+'/');}});//把首页爬取的menu URL数据加入到需要爬取的队列中c.queue(urlList);console.log(urlList,urlList.length)console.log('menuList 共',menuList.length ,'条数据');dbo.collection("menu").insertMany(menuList, function(err, res) {if (err) throw err;console.log('数据导入成功!');// db.close();})}done();}}])res.render('craw');});
});module.exports = router;

node 爬虫 实战 - 爬取拉勾网职位数据相关推荐

  1. Python爬取拉勾网职位数据

    哈喽大家好,我是宁一,今天我们来讲讲Python爬虫,用Python来爬取拉勾网的数据,拉勾网的反爬虫技术做的很厉害,通过普通的header请求总是返回请求频繁的信息 所以我们主要来用selenium ...

  2. Python爬虫 senlenium爬取拉勾网招聘数据,你学会了吗

    一.基本思路 目标url:https://www.lagou.com/ 用selenium爬虫实现,输入任意关键字,比如 python 数据分析 ,点击搜索,得到的有关岗位信息,爬取下来保存到Exce ...

  3. python爬虫senlenium爬取拉勾网招聘数据!

    一.基本思路 目标url:https://www.lagou.com/ 用selenium爬虫实现,输入任意关键字,比如 python 数据分析,点击搜索,得到的有关岗位信息,爬取下来保存到Excel ...

  4. js 拉勾网效果_python爬取拉勾网职位数据

    今天写的这篇文章是关于python爬虫简单的一个使用,选取的爬取对象是著名的招聘网站--拉钩网,由于和大家的职业息息相关,所以爬取拉钩的数据进行分析,对于职业规划和求职时的信息提供有很大的帮助. 完成 ...

  5. Python爬虫:爬取拉勾网职位并分析

    大数据杂谈 一起行走数据江湖! 作者:闲庭信步 原文链接: https://blog.csdn.net/danspace1/article/details/80197106 如需转载,请联系原作者. ...

  6. python爬取历史天气查询_Python爬虫实战-爬取历史天气数据

    最近项目需要对合肥市历史天气数据进行爬取,分析了几个天气数据网站,最终选择天气后报网站. 将实现过程遇到的问题以及下来,供以后参考. 步骤分析 这里我使用的是Python中的requests库Beau ...

  7. java爬取拉勾网职位数据

    原文出自:自我的青春 笔者说明~~~!!!只用于学习交流,私自用于其他途径,后果自负!!!      1.相关jar准备          fastjson-1.1.41.jar ,jsoup-1.6 ...

  8. python爬虫 senlenium爬取拉勾网招聘数据

    文章目录 一.基本思路 二.selenium爬虫 三.查看数据 原文链接:https://yetingyun.blog.csdn.net/article/details/108170411 创作不易, ...

  9. java爬虫拉勾网_[Java教程]node.js爬虫爬取拉勾网职位信息

    [Java教程]node.js爬虫爬取拉勾网职位信息 0 2017-03-14 00:00:21 简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京.上海.广州.深圳 ...

最新文章

  1. CSL-YOLO | 超越Tiny-YOLO V4,全新设计轻量化YOLO模型实现边缘实时检测!!!
  2. 这些老外的开源技术养活了很多国产软件
  3. 教你玩转CSS 分组选择器和嵌套选择器
  4. Nginx 的 server_names_hash_bucket_size 问题
  5. 运行CrossOver应用程序的四种方法
  6. Chirp信号基础知识及matlab实现
  7. Python OpenCV 美女换装,图像处理取经之旅第 19 天
  8. matlab鲍威尔算法,鲍威尔法matlab程序
  9. 红巨星粒子特效合集插件:Trapcode Suite 18 Mac版(支持m1)
  10. 【哈佛幸福课·健康之道】锻炼的真相
  11. 电台复活节_如何通过在控制台中隐藏复活节彩蛋使您的应用程序用户惊讶
  12. 用类描述计算机CPU的速度和硬件的容量
  13. 【面试记录】北京亚控科技一面
  14. 01-游戏分类与热点探索
  15. 工作如何避免情绪内耗
  16. 学习笔记 | 二八定律、ABC分析法
  17. 中国互联网企业员工平均年龄出炉:字节跳动、拼多多最年轻仅 27 岁
  18. 进入docker容器后,按删除键是空格解决办法
  19. java编程实现107653秒是几天几小时几分钟几秒
  20. 全国实时天气预警查询

热门文章

  1. 全球及中国空气净化器市场销售模式与营销策略前景咨询报告2022版
  2. php1050r210,parkerPARKESL parker维修PARKEROP-ETCATparker油管PARKESLV压力传感器
  3. 针对平层住宅的分布式无线组网方案(含万兆NAS)
  4. html书写表单laber,laber(labelhood是什么意思)
  5. Androd Camera Yuv Jepg bmp
  6. Reality Shares联合纳斯达克,将推出区块链经济指数
  7. 区块链经济:机构加密经济学的初学者指南
  8. vb.net 随窗口改变,缩放控件大小以及保持相对位置
  9. 【历史上的今天】11 月 11 日:腾讯成立;信息论先驱出生;阿德曼提出 DNA 计算
  10. JS字符(字母)与ASCII码转换