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

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

NodeJS-糗事百科段子爬蟲

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

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

運行代碼的結果如下:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仁化县| 德州市| 固阳县| 汝城县| 北京市| 兴宁市| 江达县| 乌什县| 南平市| 广汉市| 泽普县| 苏尼特左旗| 芒康县| 赫章县| 台安县| 钦州市| 襄樊市| 通辽市| 黄大仙区| 苏尼特左旗| 扬州市| 天津市| 弥渡县| 阳信县| 尼勒克县| 遵义市| 林芝县| 左云县| 朝阳区| 泸溪县| 合肥市| 马尔康县| 彝良县| 拉萨市| 铜梁县| 蓬安县| 贵阳市| 黄骅市| 宁阳县| 宜川县| 五家渠市|