<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答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
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        NodeJS制作爬蟲(chóng)全過(guò)程_node.js

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:30:46
        文檔

        NodeJS制作爬蟲(chóng)全過(guò)程_node.js

        NodeJS制作爬蟲(chóng)全過(guò)程_node.js:今天來(lái)學(xué)習(xí)alsotang的爬蟲(chóng)教程,跟著把CNode簡(jiǎn)單地爬一遍。 建立項(xiàng)目craelr-demo 我們首先建立一個(gè)Express項(xiàng)目,然后將app.js的文件內(nèi)容全部刪除,因?yàn)槲覀儠簳r(shí)不需要在Web端展示內(nèi)容。當(dāng)然我們也可以在空文件夾下直接 npm install expres
        推薦度:
        導(dǎo)讀NodeJS制作爬蟲(chóng)全過(guò)程_node.js:今天來(lái)學(xué)習(xí)alsotang的爬蟲(chóng)教程,跟著把CNode簡(jiǎn)單地爬一遍。 建立項(xiàng)目craelr-demo 我們首先建立一個(gè)Express項(xiàng)目,然后將app.js的文件內(nèi)容全部刪除,因?yàn)槲覀儠簳r(shí)不需要在Web端展示內(nèi)容。當(dāng)然我們也可以在空文件夾下直接 npm install expres
        今天來(lái)學(xué)習(xí)alsotang的爬蟲(chóng)教程,跟著把CNode簡(jiǎn)單地爬一遍。

        建立項(xiàng)目craelr-demo
        我們首先建立一個(gè)Express項(xiàng)目,然后將app.js的文件內(nèi)容全部刪除,因?yàn)槲覀儠簳r(shí)不需要在Web端展示內(nèi)容。當(dāng)然我們也可以在空文件夾下直接 npm install express來(lái)使用我們需要的Express功能。

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

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

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

        代碼如下:
        var express = require('express');
        var url = require('url'); //解析操作url
        var superagent = require('superagent'); //這三個(gè)外部依賴不要忘記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é)果為一個(gè)包含目標(biāo)url信息的對(duì)象,網(wǎng)站內(nèi)容主要在其text(string)里。

        使用cheerio解析

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

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

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

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

        代碼如下:
        superagent.get(tUrl)
        .end(function (err, res) {
        if (err) {
        return console.error(err);
        }
        var topicUrls = [];
        var $ = cheerio.load(res.text);
        // 獲取首頁(yè)所有的鏈接
        $('#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來(lái)并發(fā)抓取每個(gè)主題的內(nèi)容
        教程上展示了深度嵌套(串行)方法和計(jì)數(shù)器方法的例子,eventproxy就是使用事件(并行)方法來(lái)解決這個(gè)問(wèn)題。當(dāng)所有的抓取完成后,eventproxy接收到事件消息自動(dòng)幫你調(diào)用處理函數(shù)。

        代碼如下:
        //第一步:得到一個(gè) eventproxy 的實(shí)例
        var ep = new eventproxy();
        //第二步:定義監(jiān)聽(tīng)事件的回調(diào)函數(shù)。
        //after方法為重復(fù)監(jiān)聽(tīng)
        //params: eventname(String) 事件名,times(Number) 監(jiān)聽(tīng)次數(shù), callback 回調(diào)函數(shù)
        ep.after('topic_html', topicUrls.length, function(topics){
        // topics 是個(gè)數(shù)組,包含了 40 次 ep.emit('topic_html', pair) 中的那 40 個(gè) 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é)果如下

        擴(kuò)展練習(xí)(挑戰(zhàn))

        獲取留言用戶名和積分

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

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

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

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

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

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

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

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

        這只是對(duì)于單個(gè)文章的抓取,對(duì)于40個(gè)還有需要修改的地方。

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

        文檔

        NodeJS制作爬蟲(chóng)全過(guò)程_node.js

        NodeJS制作爬蟲(chóng)全過(guò)程_node.js:今天來(lái)學(xué)習(xí)alsotang的爬蟲(chóng)教程,跟著把CNode簡(jiǎn)單地爬一遍。 建立項(xiàng)目craelr-demo 我們首先建立一個(gè)Express項(xiàng)目,然后將app.js的文件內(nèi)容全部刪除,因?yàn)槲覀儠簳r(shí)不需要在Web端展示內(nèi)容。當(dāng)然我們也可以在空文件夾下直接 npm install expres
        推薦度:
        標(biāo)簽: js no 全過(guò)程
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品国产suv一区88| 少妇中文字幕乱码亚洲影视 | 在线a亚洲v天堂网2019无码| 精品国产成人亚洲午夜福利| 国产在线a免费观看| 亚洲区视频在线观看| 可以免费看的卡一卡二| 久久精品国产亚洲AV忘忧草18| 日韩免费精品视频| 亚洲日韩国产一区二区三区在线 | 破了亲妺妺的处免费视频国产| 亚洲日韩一区精品射精| 国产精品二区三区免费播放心| 亚洲成a∨人片在无码2023| 免费真实播放国产乱子伦| 特黄特色的大片观看免费视频| 亚洲午夜精品一级在线播放放| 皇色在线免费视频| 亚洲日本在线看片| 久久久久久99av无码免费网站| 日韩在线视精品在亚洲| 亚洲人成图片小说网站| 亚洲网站在线免费观看| 亚洲国产美女精品久久久| 高清在线亚洲精品国产二区| 中国在线观看免费的www| 亚洲黄色在线观看| 国产精品久久香蕉免费播放| 国产黄在线播放免费观看| 4480yy私人影院亚洲| 午夜一级免费视频| 9久久免费国产精品特黄| 91亚洲国产成人久久精品网站| 成人毛片免费播放| 成人无码精品1区2区3区免费看| 91亚洲va在线天线va天堂va国产| 免费观看的毛片手机视频| 在线看片免费人成视频久网下载| 亚洲国产午夜精品理论片| 又黄又爽一线毛片免费观看| 最近中文字幕免费大全|