• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    NodeJS制作爬蟲全過程_node.js

    來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 21:30:46
    文檔

    NodeJS制作爬蟲全過程_node.js

    NodeJS制作爬蟲全過程_node.js:今天來學習alsotang的爬蟲教程,跟著把CNode簡單地爬一遍。 建立項目craelr-demo 我們首先建立一個Express項目,然后將app.js的文件內(nèi)容全部刪除,因為我們暫時不需要在Web端展示內(nèi)容。當然我們也可以在空文件夾下直接 npm install expres
    推薦度:
    導(dǎo)讀NodeJS制作爬蟲全過程_node.js:今天來學習alsotang的爬蟲教程,跟著把CNode簡單地爬一遍。 建立項目craelr-demo 我們首先建立一個Express項目,然后將app.js的文件內(nèi)容全部刪除,因為我們暫時不需要在Web端展示內(nèi)容。當然我們也可以在空文件夾下直接 npm install expres
    今天來學習alsotang的爬蟲教程,跟著把CNode簡單地爬一遍。

    建立項目craelr-demo
    我們首先建立一個Express項目,然后將app.js的文件內(nèi)容全部刪除,因為我們暫時不需要在Web端展示內(nèi)容。當然我們也可以在空文件夾下直接 npm install express來使用我們需要的Express功能。

    目標網(wǎng)站分析
    如圖,這是CNode首頁一部分div標簽,我們就是通過這一系列的id、class來定位我們需要的信息。

    使用superagent獲取源數(shù)據(jù)

    superagent就是ajax API來使用的Http庫,它的使用方法與jQuery差不多,我們通過它發(fā)起get請求,在回調(diào)函數(shù)中輸出結(jié)果。

    代碼如下:
    var express = require('express');
    var url = require('url'); //解析操作url
    var superagent = require('superagent'); //這三個外部依賴不要忘記npm install
    var cheerio = require('cheerio');
    var eventproxy = require('eventproxy');
    var targetUrl = 'https://cnodejs.org/';
    superagent.get(targetUrl)
    .end(function (err, res) {
    console.log(res);
    });

    它的res結(jié)果為一個包含目標url信息的對象,網(wǎng)站內(nèi)容主要在其text(string)里。

    使用cheerio解析

    cheerio充當服務(wù)器端的jQuery功能,我們先使用它的.load()來載入HTML,再通過CSS selector來篩選元素。

    代碼如下:
    var $ = cheerio.load(res.text);
    //通過CSS selector來篩選數(shù)據(jù)
    $('#topic_list .topic_title').each(function (idx, element) {
    console.log(element);
    });

    其結(jié)果為一個個對象,調(diào)用 .each(function(index, element))函數(shù)來遍歷每一個對象,返回的是HTML DOM Elements。

    輸出 console.log($element.attr('title'));的結(jié)果為 廣州 2014年12月06日 NodeParty 之 UC 場
    之類的標題,輸出 console.log($element.attr('href'));的結(jié)果為 /topic/545c395becbcb78265856eb2之類的url。再用NodeJS1的url.resolve()函數(shù)來補全完整的url。

    代碼如下:
    superagent.get(tUrl)
    .end(function (err, res) {
    if (err) {
    return console.error(err);
    }
    var topicUrls = [];
    var $ = cheerio.load(res.text);
    // 獲取首頁所有的鏈接
    $('#topic_list .topic_title').each(function (idx, element) {
    var $element = $(element);
    var href = url.resolve(tUrl, $element.attr('href'));
    console.log(href);
    //topicUrls.push(href);
    });
    });

    使用eventproxy來并發(fā)抓取每個主題的內(nèi)容
    教程上展示了深度嵌套(串行)方法和計數(shù)器方法的例子,eventproxy就是使用事件(并行)方法來解決這個問題。當所有的抓取完成后,eventproxy接收到事件消息自動幫你調(diào)用處理函數(shù)。

    代碼如下:
    //第一步:得到一個 eventproxy 的實例
    var ep = new eventproxy();
    //第二步:定義監(jiān)聽事件的回調(diào)函數(shù)。
    //after方法為重復(fù)監(jiān)聽
    //params: eventname(String) 事件名,times(Number) 監(jiān)聽次數(shù), callback 回調(diào)函數(shù)
    ep.after('topic_html', topicUrls.length, function(topics){
    // topics 是個數(shù)組,包含了 40 次 ep.emit('topic_html', pair) 中的那 40 個 pair
    //.map
    topics = topics.map(function(topicPair){
    //use cheerio
    var topicUrl = topicPair[0];
    var topicHtml = topicPair[1];
    var $ = cheerio.load(topicHtml);
    return ({
    title: $('.topic_full_title').text().trim(),
    href: topicUrl,
    comment1: $('.reply_content').eq(0).text().trim()
    });
    });
    //outcome
    console.log('outcome:');
    console.log(topics);
    });
    //第三步:確定放出事件消息的
    topicUrls.forEach(function (topicUrl) {
    superagent.get(topicUrl)
    .end(function (err, res) {
    console.log('fetch ' + topicUrl + ' successful');
    ep.emit('topic_html', [topicUrl, res.text]);
    });
    });

    結(jié)果如下

    擴展練習(挑戰(zhàn))

    獲取留言用戶名和積分

    在文章頁面的源碼找到評論的用戶class名,classname為reply_author。console.log第一個元素 $('.reply_author').get(0)可以看到,我們需要獲取東西都在這里頭。

    首先,我們先對一篇文章進行抓取,一次性把需要的都得到即可。

    代碼如下:
    var userHref = url.resolve(tUrl, $('.reply_author').get(0).attribs.href);
    console.log(userHref);
    console.log($('.reply_author').get(0).children[0].data);

    我們可以通過https://cnodejs.org/user/username抓取積分信息

    代碼如下:
    $('.reply_author').each(function (idx, element) {
    var $element = $(element);
    console.log($element.attr('href'));
    });

    在用戶信息頁面 $('.big').text().trim()即為積分信息。

    使用cheerio的函數(shù).get(0)為獲取第一個元素。

    代碼如下:
    var userHref = url.resolve(tUrl, $('.reply_author').get(0).attribs.href);
    console.log(userHref);

    這只是對于單個文章的抓取,對于40個還有需要修改的地方。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    NodeJS制作爬蟲全過程_node.js

    NodeJS制作爬蟲全過程_node.js:今天來學習alsotang的爬蟲教程,跟著把CNode簡單地爬一遍。 建立項目craelr-demo 我們首先建立一個Express項目,然后將app.js的文件內(nèi)容全部刪除,因為我們暫時不需要在Web端展示內(nèi)容。當然我們也可以在空文件夾下直接 npm install expres
    推薦度:
    標簽: js no 全過程
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 91麻精品国产91久久久久| 久久国产精品视频| 国产亚洲精品a在线观看| 日韩精品久久久久久免费| 国产综合成人色产三级高清在线精品发布| 欧洲精品99毛片免费高清观看 | 亚洲精品亚洲人成在线观看下载| 91精品福利在线观看| 99久久精品日本一区二区免费| 合区精品久久久中文字幕一区| 国产精品一香蕉国产线看观看 | 国产亚洲精品a在线观看| 影音先锋国产精品国语对白| 国产福利视精品永久免费| 国产亚洲精品自在久久| 亚洲午夜国产精品无码| 日韩三级精品| 欧美激情精品久久久久久| 精品无码国产自产拍在线观看蜜 | 亚洲国产精品无码久久青草| 精品欧美小视频在线观看| 国产国产成人久久精品| 久久这里只有精品久久| 国产精品涩涩涩视频网站| 精品人妻中文字幕有码在线| 亚洲av无码乱码国产精品fc2| 亚洲精品99久久久久中文字幕| 女人高潮内射99精品| 久久噜噜久久久精品66| 九色精品视频在线观看| 精品久久久久久久久久久久久久久 | 亚洲AV无码精品色午夜果冻不卡| 中国大陆精品视频XXXX| 亚洲精品麻豆av| 亚洲精品国产综合久久一线| 日本精品一区二区三区四区| 蜜臀精品国产高清在线观看| 欧美日韩在线精品一区二区三区激情综合| 精品精品国产欧美在线小说区| 男女男精品视频网站在线观看| 午夜精品久久久内射近拍高清 |