Node.js Request+Cheerio實現(xiàn)一個小爬蟲-基礎(chǔ)功能實現(xiàn)1:內(nèi)容抓取

Node.js Request+Cheerio實現(xiàn)一個小爬蟲-基礎(chǔ)功能實現(xiàn)1:內(nèi)容抓取
Node.js Request+Cheerio實現(xiàn)一個小爬蟲-基礎(chǔ)功能實現(xiàn)2:文件寫入
Node.js Request+Cheerio實現(xiàn)一個小爬蟲-基礎(chǔ)功能實現(xiàn)3:流程控制及并發(fā)控制
Node.js Request+Cheerio實現(xiàn)一個小爬蟲-番外篇:代理設(shè)置

前段時間杠步,正好有一個做爬蟲的小任務(wù)贴唇。因為一直都是用js再加之Node.js的崛起容贝,就打算使用Node來完成這個任務(wù)谆膳。自然缸濒,在實現(xiàn)的過程中也遇到了許多問題此虑。所以就打算寫出來當作是回顧和整理阔拳。

既然是爬蟲纱烘,那么自然要和http的request, get, post 這一些方法相關(guān)了。至于這些知識哗脖,可以請教谷鴿或者度娘瀑踢。除了http相關(guān)的知識,對于抓取到的內(nèi)容才避,我們就需要進行提取橱夭,提取可以使用萬能的正則表達式當然也可以使用node豐富的包了。下面就是這一次小項目中用到的node的包了桑逝。

利用到的包

  1. Request
    Request 模塊是一個用起來十分方便的 http 模塊棘劣。具體的用法可以參照官方的GitHub主頁。
    官方主頁

  2. Cheerio
    Cheerio 是一個可以使用 jQuery語法來對獲取內(nèi)容進行提取的一個模塊楞遏。尤其是對于從網(wǎng)頁上抓取的的東西茬暇。因為采用和jQuery一樣的語法,所以特別適合前端來使用寡喝。
    官方主頁


介紹了包和模塊之后糙俗,那么就可以動手試一試了。那么下面就上代碼吧预鬓!


const request = require('request');
const cheerio = require('cheerio');

var shopLists = [];
var option = {
    url: url,
    // 不加入headers的話很可能會被拒絕訪問
    headers: {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.6',
        'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive'
    }
};

request(option, function(error, response, body) {
    if (!error && response.statusCode == 200) {
    // 使用Cheerio對抓取到的內(nèi)容進行解析
        var $ = cheerio.load(body, {
            ignoreWhitespace: true,
            xmlMode: true
        });

        var shopInfo = {
            pageNo: option.url.match(/g\d+p(\d+)/)[1],
            pageURL: option.url,
            info: []
        };
 
        var shopList = $('div#shop-all-list').find('a[data-hippo-type = "shop"]');

        shopList.each(function(no, shop) {
            let info = {};
            info.no = no + 1;
            info.name = $(shop).attr('title');
            info.url = $(shop).attr('href');
            shopInfo.info.push(info);
        });
        shopLists.push(shopInfo);
    }
});

這樣以來就可以抓取到想要的網(wǎng)站內(nèi)容了巧骚。當然,問題自然是解決一個又來一個的格二。既然抓到了內(nèi)容网缝,就總想要保存到一個地方去。就以保存到本地為例蟋定,于是我們可以利用到Node自帶的fs模塊來進行文件的讀取。fs模塊的使用方法草添,就還請參照官方文檔或者向谷鴿度娘請教啦驶兜。

const fs = require('fs');
...
// 剛才的爬蟲代碼
...
fs.writeFile(FILE_PATH + FILE_NAME, shopLists, 'utf-8', function(err) {
    if (err) {
        console.error("文件生成時發(fā)生錯誤.");
        throw err;
    }
    console.info('文件已經(jīng)成功生成.');
});

好了,看似是解決了一個問題远寸。那么到底行不行還是需要經(jīng)過實踐的抄淑。跑一下,問題果然出現(xiàn)了驰后。文件是0件肆资,那么是怎么回事呢?就在下一篇文章中解決吧灶芝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郑原,一起剝皮案震驚了整個濱河市唉韭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌犯犁,老刑警劉巖属愤,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異酸役,居然都是意外死亡住诸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門涣澡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贱呐,“玉大人,你說我怎么就攤上這事入桂⊙俎保” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵事格,是天一觀的道長惕艳。 經(jīng)常有香客問我,道長驹愚,這世上最難降的妖魔是什么远搪? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮逢捺,結(jié)果婚禮上谁鳍,老公的妹妹穿的比我還像新娘。我一直安慰自己劫瞳,他們只是感情好倘潜,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著志于,像睡著了一般涮因。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伺绽,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天养泡,我揣著相機與錄音,去河邊找鬼奈应。 笑死澜掩,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的杖挣。 我是一名探鬼主播肩榕,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惩妇!你這毒婦竟也來了株汉?” 一聲冷哼從身側(cè)響起筐乳,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎郎逃,沒想到半個月后哥童,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡褒翰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年贮懈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片优训。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡朵你,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揣非,到底是詐尸還是另有隱情抡医,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布早敬,位于F島的核電站忌傻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搞监。R本人自食惡果不足惜水孩,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琐驴。 院中可真熱鬧俘种,春花似錦、人聲如沸绝淡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牢酵。三九已至悬包,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間馍乙,已是汗流浹背布近。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潘拨,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓饶号,卻偏偏與公主長得像铁追,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子茫船,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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