欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用nodejs爬取前程無憂前端技能排行

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

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

具體步驟:

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

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

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

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

/*使用fiddler抓包,需要配置lan代理,且設置如下參數(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ā)送客戶端請求
require('superagent-proxy')(request);  //使用代理發(fā)送請求
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');
/*相關(guān)參數(shù),通過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()方法產(chǎn)生的實例會保存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')        //通過charset可知編碼字符格式,不設置會有亂碼
    .end(function (err, res) {
      /* 以下是處理返回數(shù)據(jù)的邏輯代碼*/
      var $ = cheerio.load(res.text);  //res.text是返回的報文主體
      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需要通過load方法傳入,然后用選擇器查找指定元素,再執(zhí)行相應操作。
// $.html(el);靜態(tài)方法,返回el元素的outerHtml
//TODO
// 1.當前只請求到一頁數(shù)據(jù),還需構(gòu)建所有頁數(shù)的請求列表
// 2.向每條數(shù)據(jù)的崗位鏈接發(fā)送請求,獲取技能關(guān)鍵字,存入文件中
// 3.node中io操作是異步的,且沒有鎖的概念,如何并發(fā)地向同一個文件正確地寫入數(shù)據(jù)

結(jié)果顯示如下:

以上所述是小編給大家介紹的使用nodejs爬前程無憂前端技能排行,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

相關(guān)文章

  • node中的Express框架詳解

    node中的Express框架詳解

    這篇文章主要介紹了node中的Express框架,框架是為了規(guī)范開發(fā)流程,降低開發(fā)難度,提高開發(fā)效率而制定的一套共人們使用的功能模塊或者是編程的約定,需要的朋友可以參考下
    2023-04-04
  • node網(wǎng)頁分段渲染詳解

    node網(wǎng)頁分段渲染詳解

    按照常理,我們渲染一張網(wǎng)頁,必定是網(wǎng)頁全部拼裝完畢,然后生成HTML字符串,傳送至客戶端。這也意味著,如果一張網(wǎng)頁處理的有快有慢的話,必須串行等到所有的邏輯都處理完畢。后端才能進行返回。
    2016-09-09
  • 為什么node.js不適合大型項目

    為什么node.js不適合大型項目

    這篇文章主要介紹了為什么node.js不適合大型項目,想了解node.js的同學,可以參考一下
    2021-04-04
  • Node.js成為Web應用開發(fā)最佳選擇的原因

    Node.js成為Web應用開發(fā)最佳選擇的原因

    本篇文章給大家詳細分析了Node.js 成為 Web 應用開發(fā)最佳選擇的十個原因,對此有需要的朋友參考下。
    2018-02-02
  • Node.js文件編碼格式的轉(zhuǎn)換的方法

    Node.js文件編碼格式的轉(zhuǎn)換的方法

    這篇文章主要介紹了Node.js文件編碼格式的轉(zhuǎn)換的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 在Node.js應用中使用Redis的方法簡介

    在Node.js應用中使用Redis的方法簡介

    這篇文章主要介紹了在Node.js應用中使用Redis的方法,最簡單的數(shù)據(jù)讀寫操作相關(guān),需要的朋友可以參考下
    2015-06-06
  • 詳解Node.js讀寫中文內(nèi)容文件操作

    詳解Node.js讀寫中文內(nèi)容文件操作

    在本篇文章中我們給大家分享了關(guān)于Node.js讀寫中文內(nèi)容文件操作的相關(guān)知識點內(nèi)容,有需要的朋友們可以學習下。
    2018-10-10
  • node.js express捕獲全局異常的三種方法實例分析

    node.js express捕獲全局異常的三種方法實例分析

    這篇文章主要介紹了node.js express捕獲全局異常的三種方法,結(jié)合實例形式簡單分析了node.js express捕獲全局異常的常見操作方法與使用注意事項,需要的朋友可以參考下
    2019-12-12
  • node封裝一個控制臺進度條插件???????詳情

    node封裝一個控制臺進度條插件???????詳情

    這篇文章主要介紹了node封裝一個控制臺進度條插件???????詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • NodeJS http模塊用法示例【創(chuàng)建web服務器/客戶端】

    NodeJS http模塊用法示例【創(chuàng)建web服務器/客戶端】

    這篇文章主要介紹了NodeJS http模塊用法,結(jié)合實例形式分析了node.js創(chuàng)建web服務器與客戶端,進行HTTP通信的相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11

最新評論