最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用nodejs爬取前程無(wú)憂前端技能排行

 更新時(shí)間:2017年05月06日 11:50:05   作者:開(kāi)發(fā)之路  
這篇文章主要介紹了使用nodejs爬前程無(wú)憂前端技能排行,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

最近準(zhǔn)備換工作,需要更新一下技能樹(shù)。為做到有的放矢,想對(duì)招聘方的要求做個(gè)統(tǒng)計(jì)。正好之前了解過(guò)nodejs,所以做了個(gè)爬蟲(chóng)搜索數(shù)據(jù)。

具體步驟:

1.  先用fiddler分析請(qǐng)求需要的header和body。

2.  再用superagent構(gòu)建上述數(shù)據(jù)發(fā)送客戶端請(qǐng)求。

3.  最后對(duì)返回的數(shù)據(jù)使用cheerio整理。

折騰了幾個(gè)晚上,只搞出了個(gè)架子,剩余工作等有時(shí)間再繼續(xù)開(kāi)發(fā)。

/*使用fiddler抓包,需要配置lan代理,且設(shè)置如下參數(shù)*/
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');  //發(fā)送客戶端請(qǐng)求
require('superagent-proxy')(request);  //使用代理發(fā)送請(qǐng)求
var cheerio = require('cheerio');    //以jq類(lèi)似的方法操作返回的字符,不需要用正則
require('superagent-charset')(request);//node不支持gbk,gb2312,this will add request.Request.prototype.charset.
var async = require('async');      //異步流控制模塊
var fs = require('fs');
/*相關(guān)參數(shù),通過(guò)fiddler抓包后復(fù)制過(guò)來(lái)*/
var ws = fs.createWriteStream('res.html',{flags:'w+'}); //a+追加的讀寫(xiě)模式,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()方法產(chǎn)生的實(shí)例會(huì)保存cookie供后續(xù)使用
request.post(loginUrl).proxy(proxy0).send(loginForms).end(function (err,res0) {
  agent.post(searchUrl)
    .proxy(proxy)          //proxy()方法需緊跟在method方法之后調(diào)用,否則fiddler抓不到數(shù)據(jù)包
    .type('application/x-www-form-urlencoded')
    .query(queryStrings)      //使用字符串格式
    .send(searchFormsString)
    .charset('gbk')        //通過(guò)charset可知編碼字符格式,不設(shè)置會(huì)有亂碼
    .end(function (err, res) {
      /* 以下是處理返回?cái)?shù)據(jù)的邏輯代碼*/
      var $ = cheerio.load(res.text);  //res.text是返回的報(bào)文主體
      async.each($('.el.title').nextAll('.el'), function(v, callback) {
        //將多余的內(nèi)容刪除,保留崗位、公司鏈接
        $(v).prepend($(v).find('.t1 a'));
        $(v).find('.t1').remove();
        ws.write($.html(v), 'utf8');
      }, function(err) {
        console.log(err);
      });
      console.log('successful');
    })
});
//jquery內(nèi)置document元素為root,cheerio需要通過(guò)load方法傳入,然后用選擇器查找指定元素,再執(zhí)行相應(yīng)操作。
// $.html(el);靜態(tài)方法,返回el元素的outerHtml
//TODO
// 1.當(dāng)前只請(qǐng)求到一頁(yè)數(shù)據(jù),還需構(gòu)建所有頁(yè)數(shù)的請(qǐng)求列表
// 2.向每條數(shù)據(jù)的崗位鏈接發(fā)送請(qǐng)求,獲取技能關(guān)鍵字,存入文件中
// 3.node中io操作是異步的,且沒(méi)有鎖的概念,如何并發(fā)地向同一個(gè)文件正確地寫(xiě)入數(shù)據(jù)

結(jié)果顯示如下:

以上所述是小編給大家介紹的使用nodejs爬前程無(wú)憂前端技能排行,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • Node.js重新刷新session過(guò)期時(shí)間的方法

    Node.js重新刷新session過(guò)期時(shí)間的方法

    在Node.js中,我們通常使用express-session這個(gè)包來(lái)使用和管理session,保存服務(wù)端和客戶端瀏覽器之間的會(huì)話狀態(tài)。那如何才能實(shí)現(xiàn)當(dāng)用戶刷新當(dāng)前頁(yè)面或者點(diǎn)擊頁(yè)面上的按鈕時(shí)重新刷新session的過(guò)期時(shí)間呢,接下來(lái)通過(guò)本文一起學(xué)習(xí)吧
    2016-02-02
  • node.js中的fs.openSync方法使用說(shuō)明

    node.js中的fs.openSync方法使用說(shuō)明

    這篇文章主要介紹了node.js中的fs.openSync方法使用說(shuō)明,本文介紹了fs.openSync方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js實(shí)現(xiàn)回調(diào)的方法示例

    node.js實(shí)現(xiàn)回調(diào)的方法示例

    這篇文章主要介紹了node.js實(shí)現(xiàn)回調(diào)的方法,結(jié)合實(shí)例形式分析了node.js實(shí)現(xiàn)向回調(diào)函數(shù)傳遞參數(shù)、閉包的使用及鏈?zhǔn)交卣{(diào)相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • 淺談KOA2 Restful方式路由初探

    淺談KOA2 Restful方式路由初探

    這篇文章主要介紹了淺談KOA2 Restful方式路由初探,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Vue+Node實(shí)現(xiàn)的商城用戶管理功能示例

    Vue+Node實(shí)現(xiàn)的商城用戶管理功能示例

    這篇文章主要介紹了Vue+Node實(shí)現(xiàn)的商城用戶管理功能,結(jié)合實(shí)例形式詳細(xì)分析了商城用戶管理的前臺(tái)登錄、校驗(yàn)、跳轉(zhuǎn)、退出等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • node.js中fs\path\http模塊的使用方法詳解

    node.js中fs\path\http模塊的使用方法詳解

    Node.js是基于Chrome V8引擎的JavaScript的運(yùn)行時(shí)(運(yùn)行環(huán)境-宿主環(huán)境),下面這篇文章主要給大家介紹了關(guān)于node.js中fs\path\http模塊的使用方法,需要的朋友可以參考下
    2023-01-01
  • Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析

    Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析

    這篇文章主要為大家,介紹了Nest.js Controller路由和請(qǐng)求處理強(qiáng)大功能解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • nodejs入門(mén)教程一:概念與用法簡(jiǎn)介

    nodejs入門(mén)教程一:概念與用法簡(jiǎn)介

    這篇文章主要介紹了nodejs入門(mén)教程之概念與用法,結(jié)合實(shí)例形式分析了nodejs基本概念、功能、命令與相關(guān)使用技巧,需要的朋友可以參考下
    2017-04-04
  • nodejs轉(zhuǎn)換音頻文件格式并壓縮導(dǎo)出zip格式(vscode語(yǔ)音插件開(kāi)發(fā))

    nodejs轉(zhuǎn)換音頻文件格式并壓縮導(dǎo)出zip格式(vscode語(yǔ)音插件開(kāi)發(fā))

    FFmpeg是一套開(kāi)源的音視頻處理工具,通俗地講,可以對(duì)音視頻文件進(jìn)行剪切、拼接、水印、轉(zhuǎn)碼等處理,這篇文章主要介紹了nodejs轉(zhuǎn)換音頻文件格式并壓縮導(dǎo)出zip格式(vscode語(yǔ)音插件開(kāi)發(fā)),需要的朋友可以參考下
    2023-05-05
  • nodejs中實(shí)現(xiàn)路由功能

    nodejs中實(shí)現(xiàn)路由功能

    這篇文章主要介紹了nodejs中實(shí)現(xiàn)路由功能,顧名思義,路由指的就是我們要針對(duì)不同的URL有不同的處理方式,本文將教你在node.js中實(shí)現(xiàn)路由功能,需要的朋友可以參考下
    2014-12-12

最新評(píng)論

兴义市| 阳曲县| 竹北市| 台山市| 靖州| 永平县| 灵寿县| 讷河市| 霍邱县| 禹城市| 尉犁县| 托克托县| 安图县| 十堰市| 长海县| 柯坪县| 文水县| 玛沁县| 札达县| 普安县| 突泉县| 龙州县| 故城县| 舞阳县| 全南县| 西畴县| 高邮市| 且末县| 诸暨市| 太白县| 同心县| 四子王旗| 巴中市| 泸溪县| 华宁县| 澜沧| 普陀区| 镇平县| 安福县| 巴彦县| 朝阳区|