nodeJS做一個(gè)簡單的爬蟲

nodeJS(準(zhǔn)確的說是express+request+cheerio)做一個(gè)簡單的爬蟲购岗,爬取豆瓣電影的電影圖片赡鲜,電影描述袖订。

默認(rèn)認(rèn)為已安裝node環(huán)境柱蟀。
??創(chuàng)建文件夾projectName在文件夾下命令行執(zhí)行npm init钩蚊,一路回車贡翘,或者自定義信息初始化項(xiàng)目;成功后執(zhí)行npm install express request cheerio -S安裝依賴砰逻;成功后在目錄下創(chuàng)建index.js鸣驱,創(chuàng)建文件夾data(用來存放爬取下來的電影描述)和image(用來存放電影圖片);接下來就開始寫爬取邏輯了蝠咆,代碼如下:

var http = require('https'); //使用https模塊
var fs = require('fs');//文件讀寫
var cheerio = require('cheerio');//jquery寫法獲取所得頁面dom元素
var request = require('request');//發(fā)送request請求
var i = 0;
var url = "https://movie.douban.com/subject/1889243/?from=subject-page";
//初始url 
function fetchPage(x) { //封裝一層函數(shù),方便遞歸調(diào)用
    startRequest(x);
}

function startRequest(x) {
    //采用http模塊向服務(wù)器發(fā)起一次get請求      
    http.get(x, function(res) { //get到x網(wǎng)址踊东,成功執(zhí)行回調(diào)函數(shù)
        var html = ''; //用來存儲請求網(wǎng)頁的整個(gè)html內(nèi)容
        res.setEncoding('utf-8'); //防止中文亂碼
        //監(jiān)聽data事件,每次取一塊數(shù)據(jù)
        res.on('data', function(chunk) {
            html += chunk;
        });
        //監(jiān)聽end事件刚操,如果整個(gè)網(wǎng)頁內(nèi)容的html都獲取完畢闸翅,就執(zhí)行回調(diào)函數(shù)
        res.on('end', function() {
            var $ = cheerio.load(html); //采用cheerio模塊解析html
            var news_item = {
                //獲取電影的標(biāo)題
                title: $('.related-info h2 i').text().trim(),
                //i是用來判斷獲取頁數(shù)
                i: i = i + 1,

            };

            console.log(news_item); //打印新聞信息
            var news_title = $('.related-info h2 i').text().trim();

            savedContent($, news_title); //存儲每篇文章的內(nèi)容及文章標(biāo)題

            savedImg($, news_title); //存儲每篇文章的圖片及圖片標(biāo)題

            //下一篇電影的url
            nextLink = $(".recommendations-bd dl:last-child dd a").attr('href');
            if(i <= 10) { //爬取10頁
                fetchPage(nextLink);
            }
        });

    }).on('error', function(err) { //http模塊的on data,on end ,on error事件
        console.log(err);
    });

}
//存儲標(biāo)題函數(shù)
function savedContent($, news_title) {
    $('#link-report span').each(function(index, item) {
        var x = $(this).text();
        x = x + '\n';
        //將新聞文本內(nèi)容一段一段添加到/data文件夾下,并用新聞的標(biāo)題來命名文件
        fs.appendFile('./data/' + news_title + '.txt', x, 'utf-8', function(err) {
            if(err) {
                console.log(err);
            }
        });
    })
}
//該函數(shù)的作用:在本地存儲所爬取到的圖片資源
function savedImg($, news_title) {
    $('#mainpic img').each(function(index, item) {
        var img_title = $('#content h1 span').text().trim(); //獲取圖片的標(biāo)題
        if(img_title.length > 35 || img_title == "") { //圖片標(biāo)題太長
            img_title = "Null";
        }
        var img_filename = img_title + '.jpg';
        var img_src = $(this).attr('src'); //獲取圖片的url

        //采用request模塊菊霜,向服務(wù)器發(fā)起一次請求坚冀,獲取圖片資源
        request.head(img_src, function(err, res, body) {
            if(err) {
                console.log(err);
            }
        });
        request(img_src).pipe(fs.createWriteStream('./image/' + news_title + '---' + img_filename));
        //通過流的方式,把圖片寫到本地/image目錄下鉴逞,并用標(biāo)題和圖片的標(biāo)題作為圖片的名稱记某。
    })
}
fetchPage(url); //主程序開始運(yùn)行

項(xiàng)目根目錄下DOC命令node index.js執(zhí)行程序,完成后可在dataimage下查看爬取下來的內(nèi)容啦构捡。

這個(gè)只是簡單的爬取電影信息的程序液南,需要其他功能,需要在邏輯中進(jìn)行改動(dòng)勾徽。(代碼是我抄的滑凉,如作者不同意,請聯(lián)系我喘帚,我修改3╂ⅰ)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吹由,隨后出現(xiàn)的幾起案子涡匀,更是在濱河造成了極大的恐慌,老刑警劉巖溉知,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡级乍,警方通過查閱死者的電腦和手機(jī)舌劳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玫荣,“玉大人甚淡,你說我怎么就攤上這事⊥背В” “怎么了贯卦?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焙贷。 經(jīng)常有香客問我撵割,道長,這世上最難降的妖魔是什么辙芍? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任啡彬,我火速辦了婚禮,結(jié)果婚禮上故硅,老公的妹妹穿的比我還像新娘庶灿。我一直安慰自己,他們只是感情好吃衅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布往踢。 她就那樣靜靜地躺著,像睡著了一般徘层。 火紅的嫁衣襯著肌膚如雪峻呕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天惑灵,我揣著相機(jī)與錄音山上,去河邊找鬼。 笑死英支,一個(gè)胖子當(dāng)著我的面吹牛佩憾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播干花,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼妄帘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了池凄?” 一聲冷哼從身側(cè)響起抡驼,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎肿仑,沒想到半個(gè)月后致盟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碎税,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年馏锡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雷蹂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杯道,死狀恐怖匪煌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情党巾,我是刑警寧澤萎庭,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站齿拂,受9級特大地震影響驳规,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜创肥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一达舒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叹侄,春花似錦巩搏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撒强,卻和暖如春禽捆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背飘哨。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工胚想, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芽隆。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓浊服,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胚吁。 傳聞我的和親對象是個(gè)殘疾皇子牙躺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 最近在搗鼓一個(gè)仿簡書的開源項(xiàng)目,從前端到后臺腕扶,一戰(zhàn)擼到底孽拷。就需要數(shù)據(jù)支持,最近mock數(shù)據(jù)半抱,比較費(fèi)勁脓恕。簡書的很多數(shù)...
    jiayisheji閱讀 2,361評論 5 15
  • 上篇文章介紹了爬蟲的基本概念和基本原理膜宋,這篇開始我們一起來看看具體如何從網(wǎng)頁中爬取自己想要的數(shù)據(jù)。 在下面爬蟲的栗...
    特慈閱讀 290評論 0 0
  • cmd命令: ./ 當(dāng)前目錄 ../ 上一級 dir 查看當(dāng)前目錄 ls 查看當(dāng)前目錄下文件 win...
    3hours閱讀 545評論 0 1
  • 你會經(jīng)常對孩子說“你真聰明”嗎? 父母們會經(jīng)常對孩子說“你真棒”乘瓤、“你真聰明”嗎?當(dāng)父母的都知道,自己看到孩子的成...
    請叫我章魚哥閱讀 298評論 0 0
  • 煙封霧鎖犹褒,人物消磨莺奸。 志隨北岳,情斷南柯统抬。 急名近利命紙薄火本,來往如梭。 而今誰與海長天闊聪建,擊缶常樂钙畔。 心中一些星星...
    陶然忘機(jī)閱讀 134評論 3 0