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

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

NodeJS-糗事百科段子爬蟲

2019-11-11 05:10:29
字體:
來源:轉載
供稿:網友

第一次爬糗事百科的段子也是不容易呀,第一次使用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();

運行代碼的結果如下:


上一篇:湊算式

下一篇:鏈表 —— 雙向循環

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 独山县| 盐边县| 乐都县| 曲阜市| 房产| 乌拉特后旗| 利川市| 偃师市| 辰溪县| 大化| 广宁县| 阿拉善左旗| 嘉善县| 承德市| 内黄县| 宁强县| 金湖县| 武定县| 河间市| 桐乡市| 长宁区| 肥东县| 沂南县| 铅山县| 太康县| 黑龙江省| 罗山县| 若羌县| 东乡族自治县| 卓资县| 松溪县| 丹巴县| 武安市| 江津市| 泉州市| 巴中市| 木兰县| 嘉黎县| 如皋市| 公安县| 扎鲁特旗|