最近准备换工作,需要更新一下技能树。为做到有的放矢,想对招聘方的要求做个统计。正好之前了解过nodejs,所以做了个爬虫搜索数据。

具体步骤:

1.  先用fiddler分析请求需要的header和body。

2.  再用superagent构建上述数据发送客户端请求。

3.  最后对返回的数据使用cheerio整理。

折腾了几个晚上,只搞出了个架子,剩余工作等有时间再继续开发。

/*使用fiddler抓包,需要配置lan代理,且设置如下参数*/
process.env.https_proxy = "http://127.0.0.1:8888";
process.env.http_proxy = "http://127.0.0.1:8888";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";/*使用到的模块*/
var request = require('superagent');    //发送客户端请求
require('superagent-proxy')(request);   //使用代理发送请求
var cheerio = require('cheerio');       //以jq类似的方法操作返回的字符,不需要用正则
require('superagent-charset')(request);//node不支持gbk,gb2312,this will add request.Request.prototype.charset.
var async = require('async');           //异步流控制模块
var fs = require('fs');/*相关参数,通过fiddler抓包后复制过来*/
var ws = fs.createWriteStream('res.html',{flags:'w+'}); //a+追加的读写模式,w+覆盖
var loginUrl = "https://login.51job.com/login.php";
var searchUrl = "http://search.51job.com/jobsearch/search_result.php";
var queryStrings = "fromJs=1&jobarea=020000&keyword=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91&keywordtype=2&lang=c&stype=2&postchannel=0000&fromType=1&confirmdate=9";
var loginForms = {lang: 'c',action: 'save',from_domain: 'i',loginname: '***',   //自己的用户名和密码password: '***',verifycode: '',isread: 'on'
};
var searchForms = {lang: 'c',stype: '2',postchannel: '0000',fromType: '1',line: '',confirmdate: '9',from: '',keywordtype: '2',keyword: '%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91',jobarea: '020000',industrytype: '',funtype: ''
};
var searchFormsString='lang=c&stype=2&postchannel=0000&fromType=1&line=&confirmdate=9&from=&keywordtype=2&keyword=%C7%B0%B6%CB%BF%AA%B7%A2&jobarea=020000&industrytype=&funtype=';
var proxy0 = process.env.https_proxy;
var proxy = process.env.http_proxy;const agent = request.agent();          //agent()方法产生的实例会保存cookie供后续使用
request.post(loginUrl).proxy(proxy0).send(loginForms).end(function (err,res0) {agent.post(searchUrl).proxy(proxy)                   //proxy()方法需紧跟在method方法之后调用,否则fiddler抓不到数据包.type('application/x-www-form-urlencoded').query(queryStrings)        //使用字符串格式
        .send(searchFormsString).charset('gbk')                //通过charset可知编码字符格式,不设置会有乱码.end(function (err, res) {/* 以下是处理返回数据的逻辑代码*/var $ = cheerio.load(res.text);   //res.text是返回的报文主体async.each($('.el.title').nextAll('.el'), function(v, callback) {//将多余的内容删除,保留岗位、公司链接$(v).prepend($(v).find('.t1 a'));$(v).find('.t1').remove();ws.write($.html(v), 'utf8');}, function(err) {console.log(err);});console.log('successful');})
});//jquery内置document元素为root,cheerio需要通过load方法传入,然后用选择器查找指定元素,再执行相应操作。
// $.html(el);静态方法,返回el元素的outerHtml
//TODO
// 1.当前只请求到一页数据,还需构建所有页数的请求列表
// 2.向每条数据的岗位链接发送请求,获取技能关键字,存入文件中
// 3.node中io操作是异步的,且没有锁的概念,如何并发地向同一个文件正确地写入数据

结果显示如下:

转载于:https://www.cnblogs.com/kevin2chen/p/6815950.html

使用nodejs爬前程无忧前端技能排行(半半成品)相关推荐

  1. 前端技能汇总 知识结构

    Frontend Knowledge Structure 项目起源 前端知识结构 可视化效果 前端开发知识结构 前端工程师 浏览器 IE6/7/8/9/10/11 (Trident) Firefox ...

  2. 记录一次nodejs爬取《17吉他》所有吉他谱

    记录一次nodejs爬取<17吉他>所有吉他谱(只探讨技术) 突然就想扒一下吉他谱了,说做就做哈哈,中间也是没有想象中的顺利啊,出现了各种意想不到的坑,包括老生常谈的nodejs异步写法, ...

  3. vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口

    菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...

  4. 用nodejs爬数据

    前提 首先你要学会用dom节点爬数据,如果你不明白请看接下来的代码,请赶紧学会. (一).我们拿王者荣耀的例子来看 (2).打开按键盘的F12打开控制台,先查看是否有jquery函数库 //pack. ...

  5. Python爬虫新手入门教学(一):爬取豆瓣电影排行信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...

  6. 【崔庆才教材】《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)

    前情提要 最近有七八个小伙伴私信问我说崔大神的<Python3网络爬虫开发实战>教材中 "3.4爬取猫眼电影排行" 一节的代码目前不能用. 首先附上崔大神的github ...

  7. 爬取豆瓣电影排行top250

    功能描述V1.0: 爬取豆瓣电影排行top250 功能分析: 使用的库 1.time 2.json 3.requests 4.BuautifulSoup 5.RequestException 上机实验 ...

  8. 转型Web前端需要学什么?如何提升Web前端技能?

    Web前端是如今互联网行业的热门人才,除了薪资待遇的不断增加,Web前端行业对人才的要求也越来越高.对于零基础想要转行进入Web前端行业的人来说,要如何学习Web前端知识?从哪开始?转型成为Web前端 ...

  9. 根据url一键爬取前端页面资源文件,恐怖如斯-----小飞兔

    前言 有一天你在网上发现一个很好看的前端页面,你想要弄下来在自己的项目上使用,于是你去查看源码,复制html代码和资源文件,过程非常的麻烦,而且很可能缺胳膊少腿,这里我给大家推荐一款可以一键爬取前端页 ...

最新文章

  1. 基于黄色LED反向电流的光电检测板
  2. python下载安装教程图解-一招解决:各种版本的Python下载安装教程
  3. 计算机二级科目电子商务,计算机二级Web数据在电子商务中的应用解析
  4. C#并行编程-并发集合
  5. c语言如何存储已编译内容,二级C语言教程章节测试13.编译预处理和动态存储分配...
  6. 【转】30个你不可不知的CSS选择器
  7. 挑战微信、试探苹果?支付宝小程序可添加到 iOS 手机桌面
  8. 一个创建 docker java jar项目案例 docker-sentinel
  9. numberformat java_【Java】java.text.NumberFormat 工具类
  10. 利用DOSBox运行汇编超详细步骤
  11. 高效的国产CAD设计工具,云端三维CAD设计平台:CrownCAD
  12. [转载]安徽会考语文篇目(2)
  13. r去掉向量中的空字符串 在R里如何去掉字符串矩阵中的空字符串 r r 识别字符串中的双引号 识别字符串中的双引号 str_detect
  14. 思科网络安全 第七章测验答案
  15. 操作系统之流?I/O操作?阻塞?epoll?
  16. 《计算机应用基础》第04章在线测试,《计算机应用基础》在线测试.doc
  17. hdu 4009 Transfer water(最小树形图模板)
  18. echarts 北京热力图以及自定义图标
  19. CUDA之GPU计算的起源
  20. 拓嘉辰丰:拼多多网店该如何提升动销率?

热门文章

  1. springboot响应结果超长(7.8M)浏览器无法接收
  2. Java经纬度坐标与高斯坐标的转换
  3. Windows环境下查看Java进程ID,找到java程序对应的进程pid
  4. MySQL无法读表错误的解决方法(MySQL 1018 error)
  5. Android开发笔记(一百一十五)设计工具
  6. mysql 大表 驱动_MySql 小表驱动大表
  7. Literal Web 服务器控件
  8. ERC223以太坊通证标准
  9. wcf服务契约代理链
  10. Ember.js 1.0 RC6 发布,JavaScript 框架