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

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

NodeJS-糗事百科段子爬蟲

2019-11-11 06:38:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

第一次爬糗事百科的段子也是不容易呀,第一次使用http的get模式去爬,發(fā)現(xiàn)爬不到數(shù)據(jù)。估計(jì)是被反爬了吧。最后采用request模塊來(lái)做,之后就成功爬取到糗事百科上的html網(wǎng)頁(yè)數(shù)據(jù)了。不過(guò)只是爬到原始的HTML數(shù)據(jù)而已,與瀏覽器上直接觀看的html源碼還是有點(diǎn)區(qū)別的。因?yàn)闉g覽器上的代碼是經(jīng)過(guò)Ajax數(shù)據(jù)更改過(guò)的。所以一開始我爬到數(shù)據(jù)之后,在瀏覽器上找到相應(yīng)的id后就獲取了。結(jié)果發(fā)現(xiàn)什么數(shù)據(jù)都沒(méi)有。之后將網(wǎng)頁(yè)代碼打印出來(lái)后,發(fā)現(xiàn)根本和瀏覽器代碼是不相同的。

瀏覽器的代碼:

真實(shí)上爬取到的代碼:

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

要注意的細(xì)節(jié)就基本上完成,上代碼:

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,//當(dāng)前的頁(yè)數(shù)        sum:startNum+Sum,//總的爬取頁(yè)數(shù)        url:Url,//當(dāng)前爬取的url地址        newUrl:null,//新組裝的url地址        data:null,//頁(yè)面爬取的html內(nèi)容        timer:null,//定時(shí)器,控制爬蟲的結(jié)束        ws:null,//文件操作變量    }    //爬取入口函數(shù)    this.fetchPage = function(){        console.log(page);        startRequest(page.url+page.i);    }    //開始爬取數(shù)據(jù)函數(shù)    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('當(dāng)前爬取的頁(yè)數(shù): '+page.i);                    //下一篇文章的url                    page.newUrl = page.url + ++page.i;                    startRequest(page.newUrl);                } else{                    clearInterval(page.timer);                }        }        function acquireData(){           //console.log("html:"+page.data);            //cheerio插件相當(dāng)于jq的功能            var $ = cheerio.load(page.data);            //看頁(yè)面可以知道,當(dāng)前的圖片有class=test,將它們當(dāng)數(shù)組存進(jìn)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+"頁(yè)全部爬取完畢!");        }    }}var start = new run('http://www.qiushibaike.com/text/page/',1,35);start.fetchPage();

運(yùn)行代碼的結(jié)果如下:


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 峨眉山市| 定西市| 海原县| 荆门市| 台前县| 礼泉县| 民丰县| 邵阳市| 白城市| 衡东县| 宜丰县| 驻马店市| 隆尧县| 陆良县| 哈密市| 平武县| 诏安县| 靖边县| 山丹县| 江北区| 漠河县| 绵竹市| 句容市| 绥阳县| 探索| 磴口县| 平湖市| 朔州市| 潍坊市| 聊城市| 无棣县| 岢岚县| 吐鲁番市| 孟津县| 五寨县| 元谋县| 扶沟县| 达日县| 大连市| 正阳县| 卓尼县|