最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)

百度百科的解釋:

爬蟲(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ù)的話,那么你的爬蟲(chóng)就是一個(gè)小百度或者小谷歌了

什么是robots協(xié)議

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

Robots協(xié)議(也稱為爬蟲(chóng)協(xié)議、機(jī)器人協(xié)議等)的全稱是“網(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è)命令。它是搜索引擎中訪問(wèn)網(wǎng)站的時(shí)候要查看的第一個(gè)文件。robots.txt文件告訴蜘蛛程序在服務(wù)器上什么文件是可以被查看的。

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

如果該文件不存在,所有的搜索蜘蛛將能夠訪問(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就是主人在房間門口懸掛的“請(qǐng)勿打擾”或“歡迎打掃”的提示牌。這個(gè)文件告訴來(lái)訪的搜索引擎哪些房間可以進(jìn)入和參觀,哪些房間因?yàn)榇娣刨F重物品,或可能涉及住戶及訪客的隱私而不對(duì)搜索引擎開(kāi)放。但robots.txt不是命令,也不是防火墻,如同守門人無(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)使用了??梢渣c(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è)硬盤,假如是F盤,cmd環(huán)境下執(zhí)行: express mySpider

然后你發(fā)覺(jué)你的F盤上多了一個(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)文章

  • Node.js深入分析Koa源碼

    Node.js深入分析Koa源碼

    本文主要從源碼的角度來(lái)講述 Koa,尤其是其中間件系統(tǒng)是如何實(shí)現(xiàn)的。跟 Express 相比,Koa 的源碼異常簡(jiǎn)潔,Express 因?yàn)榘崖酚上嚓P(guān)的代碼嵌入到了主要邏輯中,因此讀 Express 的源碼可能長(zhǎng)時(shí)間不得要領(lǐng),而直接讀 Koa 的源碼幾乎沒(méi)有什么障礙
    2022-08-08
  • node.js中實(shí)現(xiàn)GET和POST請(qǐng)求的代碼示例

    node.js中實(shí)現(xiàn)GET和POST請(qǐng)求的代碼示例

    在很多場(chǎng)景中,我們的服務(wù)器都需要跟用戶的瀏覽器打交道,如發(fā)送驗(yàn)證碼、登錄表單提交,請(qǐng)求服務(wù)器數(shù)據(jù)一般都使用GET請(qǐng)求,表單提交到服務(wù)器一般都使用POST請(qǐng)求,本文詳細(xì)介紹了在Node.js中如何處理GET和POST請(qǐng)求,需要的朋友可以參考下
    2024-12-12
  • Node.js 中正確使用 async/await 與 Promise 對(duì)象配合(操作方法)

    Node.js 中正確使用 async/await 與 Promise 

    在Node.js中,async/await是ES2017引入的一種更簡(jiǎn)潔的處理異步操作的方式,它基于Promise來(lái)進(jìn)行編寫,使得異步代碼看起來(lái)更像同步代碼,易于理解和維護(hù),這篇文章主要介紹了Node.js 中正確使用 async/await 與 Promise 對(duì)象配合,需要的朋友可以參考下
    2024-07-07
  • 詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)

    詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)

    這篇文章主要介紹了詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • NodeJS使用Range請(qǐng)求實(shí)現(xiàn)下載功能的方法示例

    NodeJS使用Range請(qǐng)求實(shí)現(xiàn)下載功能的方法示例

    本篇使用 NodeJS 的 HTTP 服務(wù)創(chuàng)建客戶端,使用 Range 請(qǐng)求實(shí)現(xiàn)下載功能,本篇使用 NodeJS 的 HTTP 服務(wù)創(chuàng)建客戶端,使用 Range 請(qǐng)求實(shí)現(xiàn)下載功能
    2018-10-10
  • 利用n工具輕松管理Node.js的版本

    利用n工具輕松管理Node.js的版本

    我們?cè)跍y(cè)試寫的Nodejs的程序在不同Nodejs版本下是否能正常運(yùn)行,或是我們想要嘗試下最新版 Nodejs 的新特性,但常用的代碼需要舊版本的 Nodejs的時(shí)候就需要用 Node 版本管理工具,本文介紹的是利用n工具如何輕松管理Node.js的版本,需要的朋友可以參考下。
    2017-04-04
  • node.js如何操作MySQL數(shù)據(jù)庫(kù)

    node.js如何操作MySQL數(shù)據(jù)庫(kù)

    這篇文章主要介紹了node.js如何操作MySQL數(shù)據(jù)庫(kù),幫助大家更好的進(jìn)行web開(kāi)發(fā),感興趣的朋友可以了解下
    2020-10-10
  • 詳解Nodejs 通過(guò) fs.createWriteStream 保存文件

    詳解Nodejs 通過(guò) fs.createWriteStream 保存文件

    本篇文章主要介紹了Nodejs 通過(guò) fs.createWriteStream 保存文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • nodejs通過(guò)釘釘群機(jī)器人推送消息的實(shí)現(xiàn)代碼

    nodejs通過(guò)釘釘群機(jī)器人推送消息的實(shí)現(xiàn)代碼

    最近在用 nodejs 寫爬蟲(chóng),之前的 nodejs 爬蟲(chóng)代碼用 js 寫的,感覺(jué)可維護(hù)性太差,也沒(méi)有智能提示,于是把js改用ts(typescript)重寫一下,提升代碼質(zhì)量。接下來(lái)通過(guò)本文給大家分享nodejs通過(guò)釘釘群機(jī)器人推送消息,需要的朋友參考下吧
    2019-05-05
  • node.js自動(dòng)上傳ftp的腳本分享

    node.js自動(dòng)上傳ftp的腳本分享

    這篇文章主要給大家介紹了一個(gè)關(guān)于node.js自動(dòng)上傳ftp腳本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06

最新評(píng)論

元江| 报价| 浦城县| 旬阳县| 原阳县| 安平县| 确山县| 金塔县| 新巴尔虎左旗| 巧家县| 彭水| 三都| 喀喇| 永昌县| 图木舒克市| 义马市| 海盐县| 大邑县| 开封市| 长岛县| 武平县| 五台县| 裕民县| 望谟县| 定远县| 海盐县| 揭东县| 克东县| 阿坝县| 龙川县| 九台市| 辰溪县| 定西市| 尼木县| 闻喜县| 宁海县| 保山市| 沙雅县| 诸暨市| 城口县| 大新县|