使用nodejs爬前程无忧前端技能排行(半半成品)
最近准备换工作,需要更新一下技能树。为做到有的放矢,想对招聘方的要求做个统计。正好之前了解过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爬前程无忧前端技能排行(半半成品)相关推荐
- 前端技能汇总 知识结构
Frontend Knowledge Structure 项目起源 前端知识结构 可视化效果 前端开发知识结构 前端工程师 浏览器 IE6/7/8/9/10/11 (Trident) Firefox ...
- 记录一次nodejs爬取《17吉他》所有吉他谱
记录一次nodejs爬取<17吉他>所有吉他谱(只探讨技术) 突然就想扒一下吉他谱了,说做就做哈哈,中间也是没有想象中的顺利啊,出现了各种意想不到的坑,包括老生常谈的nodejs异步写法, ...
- vue+node+mongoDB火车票H5(七)-- nodejs 爬12306查票接口
菜鸟一枚,业余一直想做个火车票查票的H5,前端页面什么的已经写好了,node+mongoDB 也写了一个车站的接口,但 接下来的爬12306获取车次信息数据一直卡住,网上的爬12306的大部分是pyt ...
- 用nodejs爬数据
前提 首先你要学会用dom节点爬数据,如果你不明白请看接下来的代码,请赶紧学会. (一).我们拿王者荣耀的例子来看 (2).打开按键盘的F12打开控制台,先查看是否有jquery函数库 //pack. ...
- Python爬虫新手入门教学(一):爬取豆瓣电影排行信息
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- 【崔庆才教材】《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)
前情提要 最近有七八个小伙伴私信问我说崔大神的<Python3网络爬虫开发实战>教材中 "3.4爬取猫眼电影排行" 一节的代码目前不能用. 首先附上崔大神的github ...
- 爬取豆瓣电影排行top250
功能描述V1.0: 爬取豆瓣电影排行top250 功能分析: 使用的库 1.time 2.json 3.requests 4.BuautifulSoup 5.RequestException 上机实验 ...
- 转型Web前端需要学什么?如何提升Web前端技能?
Web前端是如今互联网行业的热门人才,除了薪资待遇的不断增加,Web前端行业对人才的要求也越来越高.对于零基础想要转行进入Web前端行业的人来说,要如何学习Web前端知识?从哪开始?转型成为Web前端 ...
- 根据url一键爬取前端页面资源文件,恐怖如斯-----小飞兔
前言 有一天你在网上发现一个很好看的前端页面,你想要弄下来在自己的项目上使用,于是你去查看源码,复制html代码和资源文件,过程非常的麻烦,而且很可能缺胳膊少腿,这里我给大家推荐一款可以一键爬取前端页 ...
最新文章
- 基于黄色LED反向电流的光电检测板
- python下载安装教程图解-一招解决:各种版本的Python下载安装教程
- 计算机二级科目电子商务,计算机二级Web数据在电子商务中的应用解析
- C#并行编程-并发集合
- c语言如何存储已编译内容,二级C语言教程章节测试13.编译预处理和动态存储分配...
- 【转】30个你不可不知的CSS选择器
- 挑战微信、试探苹果?支付宝小程序可添加到 iOS 手机桌面
- 一个创建 docker java jar项目案例 docker-sentinel
- numberformat java_【Java】java.text.NumberFormat 工具类
- 利用DOSBox运行汇编超详细步骤
- 高效的国产CAD设计工具,云端三维CAD设计平台:CrownCAD
- [转载]安徽会考语文篇目(2)
- r去掉向量中的空字符串 在R里如何去掉字符串矩阵中的空字符串 r r 识别字符串中的双引号 识别字符串中的双引号 str_detect
- 思科网络安全 第七章测验答案
- 操作系统之流?I/O操作?阻塞?epoll?
- 《计算机应用基础》第04章在线测试,《计算机应用基础》在线测试.doc
- hdu 4009 Transfer water(最小树形图模板)
- echarts 北京热力图以及自定义图标
- CUDA之GPU计算的起源
- 拓嘉辰丰:拼多多网店该如何提升动销率?