国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

NodeJS-糗事百科段子爬蟲

2019-11-11 04:37:06
字體:
來源:轉載
供稿:網友

第一次爬糗事百科的段子也是不容易呀,第一次使用http的get模式去爬,發現爬不到數據。估計是被反爬了吧。最后采用request模塊來做,之后就成功爬取到糗事百科上的html網頁數據了。不過只是爬到原始的HTML數據而已,與瀏覽器上直接觀看的html源碼還是有點區別的。因為瀏覽器上的代碼是經過Ajax數據更改過的。所以一開始我爬到數據之后,在瀏覽器上找到相應的id后就獲取了。結果發現什么數據都沒有。之后將網頁代碼打印出來后,發現根本和瀏覽器代碼是不相同的。

瀏覽器的代碼:

真實上爬取到的代碼:

所以這里面要想獲取到數據的話,還是需要在真實爬取到的源碼上找到它的類或id才能夠獲取得到數據呀。

要注意的細節就基本上完成,上代碼:

var request = require('request');var cheerio = require('cheerio');var path = require('path');var fs = require('fs');var http = require('http');var run = function(Url,startNum,Sum){    var page={        i:startNum,//當前的頁數        sum:startNum+Sum,//總的爬取頁數        url:Url,//當前爬取的url地址        newUrl:null,//新組裝的url地址        data:null,//頁面爬取的html內容        timer:null,//定時器,控制爬蟲的結束        ws:null,//文件操作變量    }    //爬取入口函數    this.fetchPage = function(){        console.log(page);        startRequest(page.url+page.i);    }    //開始爬取數據函數    function startRequest(x) {        request(x, function (error, response, body) {            console.log(error);            if (!error && response.statusCode == 200) {                //console.log(body);                page.data = body;                //console.log(page.data);                if(page.timer==null){                    page.ws = fs.createWriteStream('output.txt','utf-8');                    page.timer = setInterval(nextPage,1000);                }            }        });        function nextPage(){             //控制爬多少篇文章                if (page.i <= page.sum) {                    acquireData();                    console.log('當前爬取的頁數: '+page.i);                    //下一篇文章的url                    page.newUrl = page.url + ++page.i;                    startRequest(page.newUrl);                } else{                    clearInterval(page.timer);                }        }        function acquireData(){           //console.log("html:"+page.data);            //cheerio插件相當于jq的功能            var $ = cheerio.load(page.data);            //看頁面可以知道,當前的圖片有class=test,將它們當數組存進meizi變量            var duanzi = $('.content-text div span').toArray();            var len = duanzi.length;            for(var i=0;i<len;i++){                 console.log("完成:"+i+" "+duanzi[i].children[0].data);                 page.ws.write(duanzi[i].children[0].data);            }            console.log("第"+page.i+"頁全部爬取完畢!");        }    }}var start = new run('http://www.qiushibaike.com/text/page/',1,35);start.fetchPage();

運行代碼的結果如下:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周至县| 正阳县| 菏泽市| 巩留县| 白朗县| 金平| 大关县| 左云县| 米易县| 禹州市| 凤阳县| 博乐市| 正蓝旗| 涟源市| 邢台市| 加查县| 乳源| 临潭县| 霍林郭勒市| 乳山市| 红安县| 舟曲县| 南召县| 铁岭市| 武威市| 治县。| 华坪县| 桓仁| 龙海市| 绥化市| 新化县| 临颍县| 台前县| 从化市| 卫辉市| 潢川县| 军事| 桑植县| 波密县| 禄劝| 嘉鱼县|