node+express制作爬蟲教程
最近開始重新學(xué)習(xí)node.js,之前學(xué)的都忘了。所以準(zhǔn)備重新學(xué)一下,那么,先從一個簡單的爬蟲開始吧。
什么是爬蟲
百度百科的解釋:
爬蟲即網(wǎng)絡(luò)爬蟲,是一種自動獲取網(wǎng)頁內(nèi)容的程序。是搜索引擎的重要組成部分,因此搜索引擎優(yōu)化很大程度上就是針對爬蟲而做出的優(yōu)化。
通俗一點講:
把別人網(wǎng)站的信息給弄下來,弄到自己的電腦上。然后再做一些過濾,比如篩選啊,排序啊,提取圖片啊,鏈接什么的。獲取你需要的信息。
如果數(shù)據(jù)量很大,而且你的算法又比較叼,并且可以給別人檢索服務(wù)的話,那么你的爬蟲就是一個小百度或者小谷歌了
什么是robots協(xié)議
了解完什么是爬蟲之后,我們再來了解一下爬蟲的協(xié)議了,也就是哪些東西才已去爬。
Robots協(xié)議(也稱為爬蟲協(xié)議、機(jī)器人協(xié)議等)的全稱是“網(wǎng)絡(luò)爬蟲排除標(biāo)準(zhǔn)”(Robots Exclusion Protocol),網(wǎng)站通過Robots協(xié)議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取?!?/p>
robots.txt文件是一個文本文件,它是一個協(xié)議,而不是一個命令。它是搜索引擎中訪問網(wǎng)站的時候要查看的第一個文件。robots.txt文件告訴蜘蛛程序在服務(wù)器上什么文件是可以被查看的。
當(dāng)一個搜索蜘蛛訪問一個站點時,它會首先檢查該站點根目錄下是否存在robots.txt,如果存在,搜索機(jī)器人就會按照該文件中的內(nèi)容來確定訪問的范圍;
如果該文件不存在,所有的搜索蜘蛛將能夠訪問網(wǎng)站上所有沒有被口令保護(hù)的頁面。百度官方建議,僅當(dāng)您的網(wǎng)站包含不希望被搜索引擎收錄的內(nèi)容時,才需要使用robots.txt文件。如果您希望搜索引擎收錄網(wǎng)站上所有內(nèi)容,請勿建立robots.txt文件。
如果將網(wǎng)站視為酒店里的一個房間,robots.txt就是主人在房間門口懸掛的“請勿打擾”或“歡迎打掃”的提示牌。這個文件告訴來訪的搜索引擎哪些房間可以進(jìn)入和參觀,哪些房間因為存放貴重物品,或可能涉及住戶及訪客的隱私而不對搜索引擎開放。但robots.txt不是命令,也不是防火墻,如同守門人無法阻止竊賊等惡意闖入者。
環(huán)境搭建
需要的環(huán)境:node環(huán)境
需要安裝的東西: express、require、cherrio
可以在這里找到模塊的用法:https://www.npmjs.com,直接輸入模塊名字即可,比如:require
1、express這里就不做介紹了,中文網(wǎng)址在這里,可以查看:http://www.expressjs.com.cn/
2、request模塊讓http請求變的更加簡單。最簡單的一個示例:
var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000);
安裝:npm install request
3、cherrio 是為服務(wù)器特別定制的,快速、靈活、實施的jQuery核心實現(xiàn)。
通過cherrio,我們就可以將抓取到的內(nèi)容,像使用jquery的方式來使用了??梢渣c擊這里查看:https://cnodejs.org/topic/5203a71844e76d216a727d2e
var cheerio = require('cheerio'), $ = cheerio.load('<h2 class="title">Hello world</h2>'); $('h2.title').text('Hello there!');
安裝:npm install cherrio
爬蟲實戰(zhàn)
假設(shè)你的電腦里已經(jīng)安裝好了node和express。那么我們現(xiàn)在開始進(jìn)行我們的爬蟲小程序:
1、首先隨便進(jìn)入一個硬盤,假如是F盤,cmd環(huán)境下執(zhí)行: express mySpider
然后你發(fā)覺你的F盤上多了一個 mySpider的文件夾和一些文件,進(jìn)入文件,cmd下執(zhí)行 npm install
2、然后安裝我們的require ==》npm installrequire --save
、再安裝我們的cherrio==》npm install cherrio --save
3、安裝好后,執(zhí)行npm start,如果想監(jiān)聽窗口的變化,可以執(zhí)行:supervisor start app.js,然后在瀏覽器輸入:localhost:3000,這樣我們就可以在瀏覽器看到express的一些歡迎語啊什么的
4、打開app.js文件,你會發(fā)覺里面有一大堆東西,因為是爬蟲小程序嘛,所以都是不需要滴,刪,在express的API里有這段代碼,粘貼在app.js里面
app.js
var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000);
5、我們的require登場了。繼續(xù)修改一下app.js改為:
var express = require('express'); var app = express(); var request = require('request'); app.get('/', function(req, res){ request('http://www.cnblogs.com', function (error, response, body) { if (!error && response.statusCode == 200) { res.send('hello world'); } }) }); app.listen(3000);
其中request的鏈接就是我們要爬的網(wǎng)址,加入我們要爬的是博客園的網(wǎng)站,所以輸入的是博客園的網(wǎng)址
6、引入cherrio,來讓我們可以操做爬到的網(wǎng)站的內(nèi)容,繼續(xù)修改一下app.js
var express = require('express'); var app = express(); var request = require('request'); var cheerio = require('cheerio'); app.get('/', function(req, res){ request('http://www.cnblogs.com', function (error, response, body) { if (!error && response.statusCode == 200) { //返回的body為抓到的網(wǎng)頁的html內(nèi)容 var $ = cheerio.load(body); //當(dāng)前的$符相當(dāng)于拿到了所有的body里面的選擇器 var navText=$('.post_nav_block').html(); //拿到導(dǎo)航欄的內(nèi)容 res.send(navText); } }) }); app.listen(3000);
我們抓到的內(nèi)容都返回到了request的body里面。cherrio可以獲取所有的dom選擇器。假如我們要獲取導(dǎo)航的內(nèi)容:ul的class為:post_nav_block
然后我們就可以將里面的內(nèi)容顯示出來了:
這個說明,我們的爬蟲小程序就成功了。當(dāng)然,這是一個簡單的不能再簡單的爬蟲了。不過今天的文章就暫時介紹到這里,只是大概了解一下爬蟲的過程而已。
接下來的第二篇文章會對這個爬蟲進(jìn)行升級,改版。比如異步啦,并發(fā)啦,定時去爬啦等等。
相關(guān)文章
Nodejs Post請求報socket hang up錯誤的解決辦法
這篇文章主要介紹了Nodejs Post請求報socket hang up錯誤的解決辦法,本文因少加了headers字段信息導(dǎo)致出現(xiàn)這個錯誤,本文給出了一個完整的實現(xiàn)代碼,需要的朋友可以參考下2014-09-09Node.js中使用mongoose操作mongodb數(shù)據(jù)庫的方法
如何利用mongoose將數(shù)據(jù)寫入mongodb數(shù)據(jù)庫呢?操作方法很簡單,下面小編給大家分享Node.js中使用mongoose操作mongodb數(shù)據(jù)庫的方法,感興趣的朋友一起看看吧2017-09-09window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解
這篇文章主要介紹了window系統(tǒng) nodejs安裝opencv環(huán)境配置,結(jié)合圖文形式詳細(xì)分析了window環(huán)境下 nodejs安裝opencv的具體步驟、注意事項2023-04-04淺談express 中間件機(jī)制及實現(xiàn)原理
本篇文章主要介紹了淺談express 中間件機(jī)制及實現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08