国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

如何使用nodejs爬取前程無(wú)憂(yōu)前端技能排行

發(fā)布時(shí)間:2021-07-27 11:48 來(lái)源:億速云 閱讀:0 作者:小新 欄目: web開(kāi)發(fā)

這篇文章主要為大家展示了“如何使用nodejs爬取前程無(wú)憂(yōu)前端技能排行”,內容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習一下“如何使用nodejs爬取前程無(wú)憂(yōu)前端技能排行”這篇文章吧。

具體步驟:

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

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

3.  最后對返回的數據使用cheerio整理。

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

/*使用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');  //發(fā)送客戶(hù)端請求
require('superagent-proxy')(request);  //使用代理發(fā)送請求
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)參數,通過(guò)fiddler抓包后復制過(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: '***',  //自己的用戶(hù)名和密碼
  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供后續使用
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')        //通過(guò)charset可知編碼字符格式,不設置會(huì )有亂碼
    .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需要通過(guò)load方法傳入,然后用選擇器查找指定元素,再執行相應操作。
// $.html(el);靜態(tài)方法,返回el元素的outerHtml
//TODO
// 1.當前只請求到一頁(yè)數據,還需構建所有頁(yè)數的請求列表
// 2.向每條數據的崗位鏈接發(fā)送請求,獲取技能關(guān)鍵字,存入文件中
// 3.node中io操作是異步的,且沒(méi)有鎖的概念,如何并發(fā)地向同一個(gè)文件正確地寫(xiě)入數據

結果顯示如下:

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

国产精品无码免费播放| 日韩精品一区二区午夜成人版| 久久SE精品一区二区 | 欧美色图片区| 精品国产不卡一区二区三区| 亚洲AV无码码潮喷在线观看|