欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

node+express制作爬蟲(chóng)教程

 更新時(shí)間:2016年11月11日 08:49:18   作者:xianyulaodi  
這篇文章主要介紹了node+express制作爬蟲(chóng)的詳細(xì)過(guò)程和相關(guān)基礎(chǔ)知識(shí),非常的不錯(cuò),需要的朋友可以參考下

最近開(kāi)始重新學(xué)習(xí)node.js,之前學(xué)的都忘了。所以準(zhǔn)備重新學(xué)一下,那么,先從一個(gè)簡(jiǎn)單的爬蟲(chóng)開(kāi)始吧。

什么是爬蟲(chóng)

百度百科的解釋?zhuān)?/p>

爬蟲(chóng)即網(wǎng)絡(luò)爬蟲(chóng),是一種自動(dòng)獲取網(wǎng)頁(yè)內(nèi)容的程序。是搜索引擎的重要組成部分,因此搜索引擎優(yōu)化很大程度上就是針對(duì)爬蟲(chóng)而做出的優(yōu)化。

通俗一點(diǎn)講:

把別人網(wǎng)站的信息給弄下來(lái),弄到自己的電腦上。然后再做一些過(guò)濾,比如篩選啊,排序啊,提取圖片啊,鏈接什么的。獲取你需要的信息。

如果數(shù)據(jù)量很大,而且你的算法又比較叼,并且可以給別人檢索服務(wù)的話(huà),那么你的爬蟲(chóng)就是一個(gè)小百度或者小谷歌了

什么是robots協(xié)議

了解完什么是爬蟲(chóng)之后,我們?cè)賮?lái)了解一下爬蟲(chóng)的協(xié)議了,也就是哪些東西才已去爬。

Robots協(xié)議(也稱(chēng)為爬蟲(chóng)協(xié)議、機(jī)器人協(xié)議等)的全稱(chēng)是“網(wǎng)絡(luò)爬蟲(chóng)排除標(biāo)準(zhǔn)”(Robots Exclusion Protocol),網(wǎng)站通過(guò)Robots協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取?!?/p>

robots.txt文件是一個(gè)文本文件,它是一個(gè)協(xié)議,而不是一個(gè)命令。它是搜索引擎中訪(fǎng)問(wèn)網(wǎng)站的時(shí)候要查看的第一個(gè)文件。robots.txt文件告訴蜘蛛程序在服務(wù)器上什么文件是可以被查看的。

當(dāng)一個(gè)搜索蜘蛛訪(fǎng)問(wèn)一個(gè)站點(diǎn)時(shí),它會(huì)首先檢查該站點(diǎn)根目錄下是否存在robots.txt,如果存在,搜索機(jī)器人就會(huì)按照該文件中的內(nèi)容來(lái)確定訪(fǎng)問(wèn)的范圍;

如果該文件不存在,所有的搜索蜘蛛將能夠訪(fǎng)問(wèn)網(wǎng)站上所有沒(méi)有被口令保護(hù)的頁(yè)面。百度官方建議,僅當(dāng)您的網(wǎng)站包含不希望被搜索引擎收錄的內(nèi)容時(shí),才需要使用robots.txt文件。如果您希望搜索引擎收錄網(wǎng)站上所有內(nèi)容,請(qǐng)勿建立robots.txt文件。

如果將網(wǎng)站視為酒店里的一個(gè)房間,robots.txt就是主人在房間門(mén)口懸掛的“請(qǐng)勿打擾”或“歡迎打掃”的提示牌。這個(gè)文件告訴來(lái)訪(fǎng)的搜索引擎哪些房間可以進(jìn)入和參觀,哪些房間因?yàn)榇娣刨F重物品,或可能涉及住戶(hù)及訪(fǎng)客的隱私而不對(duì)搜索引擎開(kāi)放。但robots.txt不是命令,也不是防火墻,如同守門(mén)人無(wú)法阻止竊賊等惡意闖入者。

環(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請(qǐng)求變的更加簡(jiǎn)單。最簡(jiǎn)單的一個(gè)示例:

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ù)器特別定制的,快速、靈活、實(shí)施的jQuery核心實(shí)現(xiàn)。

通過(guò)cherrio,我們就可以將抓取到的內(nèi)容,像使用jquery的方式來(lái)使用了。可以點(diǎn)擊這里查看: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

爬蟲(chóng)實(shí)戰(zhàn)

假設(shè)你的電腦里已經(jīng)安裝好了node和express。那么我們現(xiàn)在開(kāi)始進(jìn)行我們的爬蟲(chóng)小程序:

1、首先隨便進(jìn)入一個(gè)硬盤(pán),假如是F盤(pán),cmd環(huán)境下執(zhí)行: express mySpider

然后你發(fā)覺(jué)你的F盤(pán)上多了一個(gè) mySpider的文件夾和一些文件,進(jìn)入文件,cmd下執(zhí)行 npm install

2、然后安裝我們的require ==》npm installrequire --save 、再安裝我們的cherrio==》npm install cherrio --save

3、安裝好后,執(zhí)行npm start,如果想監(jiān)聽(tīng)窗口的變化,可以執(zhí)行:supervisor start app.js,然后在瀏覽器輸入:localhost:3000,這樣我們就可以在瀏覽器看到express的一些歡迎語(yǔ)啊什么的

4、打開(kāi)app.js文件,你會(huì)發(fā)覺(jué)里面有一大堆東西,因?yàn)槭桥老x(chóng)小程序嘛,所以都是不需要滴,刪,在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登場(chǎng)了。繼續(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,來(lái)讓我們可以操做爬到的網(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)頁(yè)的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)容顯示出來(lái)了:

這個(gè)說(shuō)明,我們的爬蟲(chóng)小程序就成功了。當(dāng)然,這是一個(gè)簡(jiǎn)單的不能再簡(jiǎn)單的爬蟲(chóng)了。不過(guò)今天的文章就暫時(shí)介紹到這里,只是大概了解一下爬蟲(chóng)的過(guò)程而已。

接下來(lái)的第二篇文章會(huì)對(duì)這個(gè)爬蟲(chóng)進(jìn)行升級(jí),改版。比如異步啦,并發(fā)啦,定時(shí)去爬啦等等。

代碼地址:https://github.com/xianyulaodi/mySpider

相關(guān)文章

  • package.json文件配置詳解

    package.json文件配置詳解

    這篇文章主要介紹了package.json文件配置詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-06-06
  • Nodejs Post請(qǐng)求報(bào)socket hang up錯(cuò)誤的解決辦法

    Nodejs Post請(qǐng)求報(bào)socket hang up錯(cuò)誤的解決辦法

    這篇文章主要介紹了Nodejs Post請(qǐng)求報(bào)socket hang up錯(cuò)誤的解決辦法,本文因少加了headers字段信息導(dǎo)致出現(xiàn)這個(gè)錯(cuò)誤,本文給出了一個(gè)完整的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2014-09-09
  • 深入理解NodeJS 多進(jìn)程和集群

    深入理解NodeJS 多進(jìn)程和集群

    這篇文章主要介紹了深入理解NodeJS 多進(jìn)程和集群,詳細(xì)的介紹了什么是進(jìn)程和進(jìn)程的實(shí)現(xiàn)等,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-10-10
  • 如何自動(dòng)化部署項(xiàng)目?折騰服務(wù)器之旅~

    如何自動(dòng)化部署項(xiàng)目?折騰服務(wù)器之旅~

    這篇文章主要介紹了自動(dòng)化部署項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 解讀node.js中的path路徑模塊

    解讀node.js中的path路徑模塊

    這篇文章主要介紹了解讀node.js中的path路徑模塊,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Node.js中使用mongoose操作mongodb數(shù)據(jù)庫(kù)的方法

    Node.js中使用mongoose操作mongodb數(shù)據(jù)庫(kù)的方法

    如何利用mongoose將數(shù)據(jù)寫(xiě)入mongodb數(shù)據(jù)庫(kù)呢?操作方法很簡(jiǎn)單,下面小編給大家分享Node.js中使用mongoose操作mongodb數(shù)據(jù)庫(kù)的方法,感興趣的朋友一起看看吧
    2017-09-09
  • Node.js原生api搭建web服務(wù)器的方法步驟

    Node.js原生api搭建web服務(wù)器的方法步驟

    這篇文章主要介紹了Node.js原生api搭建web服務(wù)器的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 配置Node.js環(huán)境變量詳細(xì)圖文教程

    配置Node.js環(huán)境變量詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于配置Node.js環(huán)境變量詳細(xì)圖文教程的相關(guān)資料,在Node.js中設(shè)置環(huán)境變量非常簡(jiǎn)單,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解

    window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解

    這篇文章主要介紹了window系統(tǒng) nodejs安裝opencv環(huán)境配置,結(jié)合圖文形式詳細(xì)分析了window環(huán)境下 nodejs安裝opencv的具體步驟、注意事項(xiàng)
    2023-04-04
  • 淺談express 中間件機(jī)制及實(shí)現(xiàn)原理

    淺談express 中間件機(jī)制及實(shí)現(xiàn)原理

    本篇文章主要介紹了淺談express 中間件機(jī)制及實(shí)現(xiàn)原理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08

最新評(píng)論