一周內(nèi)從0到1掌握Node爬蟲(chóng)技巧(二)

上篇文章介紹了爬蟲(chóng)的基本概念和基本原理瞻惋,這篇開(kāi)始我們一起來(lái)看看具體如何從網(wǎng)頁(yè)中爬取自己想要的數(shù)據(jù)。

在下面爬蟲(chóng)的栗子中享钞,我們使用nodejs來(lái)作為我們的運(yùn)行環(huán)境(我是前端工程師哦)钝荡!

一、準(zhǔn)備環(huán)境

1啸盏、nodejs環(huán)境安裝可以點(diǎn)擊這里nodejs中文網(wǎng)下載安裝包哦!

二骑祟、創(chuàng)建項(xiàng)目

1回懦、安裝好nodejs后气笙,運(yùn)行cmd切換到你想要?jiǎng)?chuàng)建的目錄;

2粉怕、mkdir myspider(創(chuàng)建myspider文件夾)健民;

3抒巢、cd 到myspider目錄下贫贝;

4、命令行輸入npm init(初始化該小項(xiàng)目):

此時(shí)需要填寫(xiě)一些項(xiàng)目信息蛉谜,你可以根據(jù)情況填寫(xiě)稚晚,當(dāng)然也可以一路回車(chē)哦。

初始化過(guò)程中會(huì)產(chǎn)生這些選項(xiàng)

執(zhí)行完成后會(huì)有一個(gè)packge.json配置文件:

里面包含我們這個(gè)項(xiàng)目的一些信息

5型诚、安裝第三方包庫(kù)

這些包庫(kù)在程序中引入會(huì)自動(dòng)加載的哦客燕。這些包庫(kù)的使用不僅會(huì)大大減少我們的代碼量,而且還會(huì)使我們的代碼更優(yōu)雅狰贯、更好維護(hù)哦也搓。

我們的所有第三方庫(kù)都是依賴(lài)于npm(node package manager)node包管理器來(lái)下載,只需要運(yùn)行npm install xxx --save來(lái)安裝涵紊,了解更多關(guān)于npm點(diǎn)擊這里查看傍妒。(我覺(jué)得這就是nodejs發(fā)展異常迅速的原因之一)

1)、express(npm install express --save)

express庫(kù)為我們提供了一系列便捷的方法摸柄,讓我們管理和構(gòu)建大型項(xiàng)目變的非常簡(jiǎn)單颤练;小項(xiàng)目就更不必說(shuō)了。更多關(guān)于express可以點(diǎn)擊這里查看驱负。

2)嗦玖、cheerio(npm install express --save)

cherrio 是為服務(wù)器特別定制的,快速跃脊、靈活宇挫、實(shí)施的jQuery核心實(shí)現(xiàn)。通過(guò)cherrio,我們就可以將抓取到的內(nèi)容酪术,像使用jquery的方式來(lái)使用了捞稿。可以點(diǎn)擊這里查看拼缝。

簡(jiǎn)單示例如下:

varcheerio = require('cheerio')娱局;

$= cheerio.load('Hello world');

$('h2.title').text('Hello there!');

3)、superagent(npm install superagent --save)

superagent模塊讓http請(qǐng)求變的更加簡(jiǎn)單咧七,了解更多點(diǎn)擊這里查看衰齐。最簡(jiǎn)單的一個(gè)示例如下:

var request = require('superagent');

request.get('http://example.com/search').end(function(res){});

有些模塊是nodejs中的內(nèi)置模塊不需要使用npm來(lái)下載的,還有其他第三方模塊會(huì)在后續(xù)文章中陸續(xù)介紹继阻。

三耻涛、開(kāi)始你的表演废酷。。抹缕。

安裝完上面的包澈蟆,我們就可以開(kāi)始簡(jiǎn)單的實(shí)踐嘍!在myspider文件加下創(chuàng)建app.js卓研。如下圖 :

var express=require('express');

var cheerio=require('cheerio');

var request=require('superagent');

var app=express();

app.get('/',function(req,res){

? ? console.log('hello man!');

});

app.listen(function(req,res) {

? ? console.log('server is running at port 3000!');

});

? ? 然后在命令行運(yùn)行 node app.js趴俘,如圖:

運(yùn)行node app.js

接著在瀏覽器地址欄輸入localhost:3000/,回車(chē)奏赘,如圖:

地址欄輸入localhost:3000

這樣一個(gè)簡(jiǎn)單的本地服務(wù)器模擬就實(shí)現(xiàn)了哦寥闪!

接下來(lái)我們就看看在服務(wù)器中使用request向我們的目標(biāo)網(wǎng)站發(fā)起http請(qǐng)求,將原來(lái)代碼改為:

app.get('/',function(req,res){

? ? request.get('http://www.dytt8.net').end(function(err,ress) {

? ? if(!err) {

? ? ? ? ? res.send('請(qǐng)求成功嘍磨淌!');

? ? ?}

? ? });

});

我們這樣就可以進(jìn)入我們要爬取網(wǎng)站了疲憋!

我們引入cheerio包幫我們實(shí)現(xiàn)我們想要爬取的內(nèi)容,將app.js代碼改一下:

var express=require('express');

var cheerio=require('cheerio');

var charset=require('superagent-charset');//解決網(wǎng)頁(yè)編碼問(wèn)題

var request=require('superagent');

var app=express();

charset(request);

app.get('/',function(req,res){

? ? request.get('http://www.dytt8.net').charset('gb2312').end(function(err,ress) {

//錯(cuò)誤處理

if(err){

? ? console.log(err);

}else{

? ? var $=cheerio.load(ress.text);//$和jquery中的選擇器類(lèi)似梁只,可以選擇網(wǎng)頁(yè)中所有的元素

? ? var ?navText=$('#menu .contain ul li a').text();

? ? res.end(navText);

}

});

});

app.listen(3000,function(req,res) {

? ? console.log('server is running at port 3000!');

});

瀏覽器運(yùn)行結(jié)果如下:


爬取的結(jié)果

到此一個(gè)最簡(jiǎn)單的爬蟲(chóng)程序就基本實(shí)踐成功了缚柳,后續(xù)會(huì)逐步實(shí)現(xiàn)更為復(fù)雜的爬蟲(chóng)程序,希望對(duì)大家有所幫助搪锣。錯(cuò)誤難免秋忙,敬請(qǐng)斧正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淤翔,一起剝皮案震驚了整個(gè)濱河市翰绊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旁壮,老刑警劉巖监嗜,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抡谐,居然都是意外死亡裁奇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)麦撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刽肠,“玉大人,你說(shuō)我怎么就攤上這事免胃∫粑澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵羔沙,是天一觀的道長(zhǎng)躺涝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)扼雏,這世上最難降的妖魔是什么坚嗜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任夯膀,我火速辦了婚禮,結(jié)果婚禮上苍蔬,老公的妹妹穿的比我還像新娘诱建。我一直安慰自己,他們只是感情好碟绑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布俺猿。 她就那樣靜靜地躺著,像睡著了一般蜈敢。 火紅的嫁衣襯著肌膚如雪辜荠。 梳的紋絲不亂的頭發(fā)上汽抚,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天抓狭,我揣著相機(jī)與錄音,去河邊找鬼造烁。 笑死否过,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惭蟋。 我是一名探鬼主播苗桂,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼告组!你這毒婦竟也來(lái)了煤伟?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤木缝,失蹤者是張志新(化名)和其女友劉穎便锨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體我碟,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡放案,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矫俺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吱殉。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厘托,靈堂內(nèi)的尸體忽然破棺而出友雳,到底是詐尸還是另有隱情,我是刑警寧澤铅匹,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布押赊,位于F島的核電站,受9級(jí)特大地震影響伊群,放射性物質(zhì)發(fā)生泄漏考杉。R本人自食惡果不足惜策精,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崇棠。 院中可真熱鬧咽袜,春花似錦、人聲如沸枕稀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萎坷。三九已至凹联,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哆档,已是汗流浹背蔽挠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瓜浸,地道東北人澳淑。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像插佛,于是被迫代替她去往敵國(guó)和親杠巡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • github地址嫩海,歡迎大家提交更新。 express() express()用來(lái)創(chuàng)建一個(gè)Express的程序识腿。ex...
    Programmer客棧閱讀 2,525評(píng)論 0 1
  • Address:https://www.zybuluo.com/XiangZhou/note/208532 Exp...
    天蠍蒗漫閱讀 11,318評(píng)論 2 55
  • cmd命令: ./ 當(dāng)前目錄 ../ 上一級(jí) dir 查看當(dāng)前目錄 ls 查看當(dāng)前目錄下文件 win...
    3hours閱讀 548評(píng)論 0 1
  • 個(gè)人入門(mén)學(xué)習(xí)用筆記出革、不過(guò)多作為參考依據(jù)。如有錯(cuò)誤歡迎斧正 目錄 簡(jiǎn)書(shū)好像不支持錨點(diǎn)渡讼、復(fù)制搜索(反正也是寫(xiě)給我自己看...
    kirito_song閱讀 2,472評(píng)論 1 37
  • Express 簡(jiǎn)介 Express 是一個(gè)簡(jiǎn)潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強(qiáng)大特性幫...
    保川閱讀 2,018評(píng)論 0 24