亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

NodeJS制作爬蟲全過程(續)

2019-11-20 13:38:19
字體:
來源:轉載
供稿:網友

書接上回,我們需要修改程序以達到連續抓取40個頁面的內容。也就是說我們需要輸出每篇文章的標題、鏈接、第一條評論、評論用戶和論壇積分。

如圖所示,$('.reply_author').eq(0).text().trim();得到的值即為正確的第一條評論的用戶。

{<1>}

在eventproxy獲取評論及用戶名內容后,我們需要通過用戶名跳到用戶界面繼續抓取該用戶積分

復制代碼 代碼如下:

var $ = cheerio.load(topicHtml);
//此URL為下一步抓取目標URL
var user + $('.reply_author').eq(0).attr('href');
userHref = url.resolve(tUrl, userHref);
var title = $('.topic_full_title').text().trim().replace(//n/g,"");;
var href = topicUrl;
var comment1 = $('.reply_content').eq(0).text().trim();
var author1 = $('.reply_author').eq(0).text().trim();
//傳遞參數到下一次并發抓取
ep.emit('user_html', [userHref, title, href, comment1, author1]);

在eventproxy這一次中,我們要找到score是放在哪里(class="big")。

{<2>}

找到classname就好辦了,我們先試著把結果輸出一下

復制代碼 代碼如下:

var outcome = superagent.get(userUrl)
    .end(function (err, res) {
        if (err) {
            return console.error(err);
        }
        var $ = cheerio.load(res.text);
        var score = $('.big').text().trim();
        console.log(user[1]);
        console.log(user[2]);
        console.log(user[3]);
        console.log(user[4]);
        console.log($('.big').text().trim());
        return ({
            title: user[1],
            href: user[2],
            comment1: user[3],
            author1: user[4],
            score1: score
        });
    });
});

運行程序,這段代碼得到的結果。

{<3>}

但是問題來了,我們在.end()的回調函數中能正確輸出結果,但是不能正確的輸出outcome。仔細一看,需要輸出的outcome是一個Request對象。這是因為粗心犯的錯的,.end()函數并不會傳遞返回值給Request對象,需要將結果返回到上一層(users)。

復制代碼 代碼如下:

//find userDetails
ep.after('user_html', topicUrls.length, function(users){
    users = users.map(function(user){
        var userUrl = user[0];
        var score;
        superagent.get(userUrl)
            .end(function (err, res) {
                if (err) {
                    return console.error(err);
                }
                //console.log(res.text);
                var $ = cheerio.load(res.text);
                score = $('.big').text().trim();
            });
        return ({
            title: user[1],
            href: user[2],
            comment1: user[3],
            author1: user[4],
            score1: score
        });
    });

把users好好地輸出發現除了score1其他是正確值。仔細調試發現,程序是先進行了console.log(),然后再進行.map()。更準確地說,在.map()函數內,.get()的回調函數并沒有執行完賦值score,return 返回值就進行了。這就是回調函數的異步,而外層的同步操作是不會等待回調函數做完操作的。

{<4>}

我的做法就是eventproxy再emit一層消息,伴隨著消息把需要的數據一起傳遞給接收消息操作.after(),只有當消息全部接收完畢,再打印出傳遞的參數(結果)。

復制代碼 代碼如下:

score = $('.big')text().trim();
//新添加
ep.emit('got_score', [user[1], user[2], user[3], user[4], score]);
.....
ep.after('got_score', 10, function(users){
console.log(users);
});

{<6>}

這個問題解決了,但score1的數值好像太大了點吧。再一看,原來class='big'有兩個,用戶的話題收藏也是屬于這個class。我們得通過cheerio的.slice( start, [end] )來切取第一個元素,即將score 修改為 score = $('.big').slice(0).eq(0).text().trim();。正確結果如圖。

{<7>}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲人成电影在线| 亚洲精品动漫久久久久| 亚洲欧洲成视频免费观看| 国产精品久久久久久久久久久久久久| 久久精视频免费在线久久完整在线看| 久久理论片午夜琪琪电影网| 97在线视频免费观看| 久久精品中文字幕| 欧美精品免费在线观看| 国产精品一区二区久久久久| 日韩电影免费观看在线| 久久久免费高清电视剧观看| 欧美激情videoshd| 亚洲精选一区二区| 国产日韩欧美一二三区| 欧美肥臀大乳一区二区免费视频| 欧美视频在线看| 久久99久国产精品黄毛片入口| 亚洲偷欧美偷国内偷| 日韩国产激情在线| 欧美大尺度激情区在线播放| 96sao精品视频在线观看| 欧美一区二区大胆人体摄影专业网站| 色悠久久久久综合先锋影音下载| 欧美日韩亚洲一区二区三区| 久久久久九九九九| 亚洲欧美另类人妖| 69视频在线播放| 国产成+人+综合+亚洲欧洲| 91久久精品国产91久久| 久久99精品久久久久久噜噜| 欧美特级www| 国产精品免费久久久久影院| 亚洲精品久久久一区二区三区| 亚洲毛片在线免费观看| 国产一区二区丝袜高跟鞋图片| 国产日韩欧美另类| 国产精品久久久久久久av大片| 精品亚洲一区二区三区在线播放| 欧美一级高清免费播放| 国产精品久久久久久久久久免费| 欧美大片免费看| 日韩av在线不卡| 黄色91在线观看| 国内精久久久久久久久久人| 成人黄色免费片| 欧美日韩国产va另类| 久久国产精品网站| xxx欧美精品| 亚洲欧美在线一区| 精品国产拍在线观看| 国产原创欧美精品| 欧美成人剧情片在线观看| 精品久久久久国产| 国产精品一区电影| 乱亲女秽乱长久久久| 久久免费视频观看| 日韩欧美在线视频免费观看| 亚洲色图综合网| 久久国产精品久久久久久久久久| 色噜噜亚洲精品中文字幕| 久久中文久久字幕| 欧美制服第一页| 久久视频这里只有精品| 九九久久精品一区| 红桃视频成人在线观看| 亚洲丁香婷深爱综合| 午夜精品三级视频福利| 国产一区二区三区欧美| 欧美性xxxx极品高清hd直播| 亚洲精品色婷婷福利天堂| 国产精品专区第二| 欧美一级淫片丝袜脚交| 九九热这里只有精品免费看| 国产综合久久久久久| 亚洲精品视频免费| 国产精品久久久久久久久| 欧美久久久精品| 欧美国产在线视频| 久久久综合av| 日韩av在线网页| 国产一区二区黑人欧美xxxx| 中文字幕自拍vr一区二区三区| 亚洲美女动态图120秒| 欧美精品videossex性护士| 久久综合88中文色鬼| 精品视频在线播放| 啪一啪鲁一鲁2019在线视频| 欧美交受高潮1| 国产精品久久久久久久久久| 国产91精品久久久久久久| 日韩av理论片| 色综合久久悠悠| 97国产真实伦对白精彩视频8| 色综合亚洲精品激情狠狠| 成人午夜在线影院| 亚洲片在线观看| 一本一本久久a久久精品牛牛影视| 久热爱精品视频线路一| 亚洲视频视频在线| 久久国产精品久久久久久久久久| 精品国产依人香蕉在线精品| 国产一区二区激情| 国产盗摄xxxx视频xxx69| 精品日本美女福利在线观看| 日韩精品极品视频免费观看| 一区二区三区回区在观看免费视频| 国产精品第2页| 欧美综合在线观看| 欧美日韩在线影院| 少妇高潮久久久久久潘金莲| 97久久精品在线| 日韩视频第一页| 久久精品久久久久| 久久综合网hezyo| 久久九九全国免费精品观看| 91久久夜色精品国产网站| 欧美与欧洲交xxxx免费观看| 91视频88av| 美女扒开尿口让男人操亚洲视频网站| 国产精品免费视频xxxx| 欧美日韩高清在线观看| 久久99青青精品免费观看| 在线观看精品国产视频| 亚洲精品国产欧美| 97视频在线观看免费高清完整版在线观看| 国产亚洲精品激情久久| 久久久电影免费观看完整版| 精品香蕉一区二区三区| 欧美极品少妇xxxxⅹ免费视频| 国产精品丝袜久久久久久高清| 国产日本欧美视频| 91在线免费网站| 精品国内亚洲在观看18黄| 国产成人精品电影| 国产精品福利在线观看| 色综合久久久888| 国产成人精品视频在线| 亚洲男人第一网站| 日韩专区在线观看| 欧美精品一二区| 国产大片精品免费永久看nba| 国产精品高潮粉嫩av| 亚洲精品第一国产综合精品| 欧美中文字幕在线| 在线观看亚洲视频| www高清在线视频日韩欧美| 久久精品国产69国产精品亚洲| 亚洲成人激情图| 欧美亚洲第一页| 久久精品国产电影| 成人欧美在线视频| 亚洲直播在线一区| 在线观看国产精品日韩av| 亚洲第一福利视频| 欧美日韩一区二区精品| 亚洲午夜av久久乱码| 亚洲精品小视频在线观看| 欧美国产第一页| 欧美日韩国产色| 欧美在线视频一二三| 色偷偷av一区二区三区乱| 青青在线视频一区二区三区| 国产精品狠色婷|