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

簡(jiǎn)單好用的nodejs 爬蟲框架分享

 更新時(shí)間:2017年03月26日 16:50:21   作者:wl879  
使用nodejs開發(fā)爬蟲半年左右了,爬蟲可以很簡(jiǎn)單,也可以很復(fù)雜。簡(jiǎn)單的爬蟲定向爬取一個(gè)網(wǎng)站,可能有個(gè)幾萬(wàn)或者幾十萬(wàn)的頁(yè)面請(qǐng)求,今天給大家介紹這款非常好用的爬蟲框架crawl-pet

這個(gè)就是一篇介紹爬蟲框架的文章,開頭就不說(shuō)什么劇情了。什么最近一個(gè)項(xiàng)目了,什么分享新知了,劇情是挺好,但介紹的很初級(jí),根本就沒(méi)有辦法應(yīng)用,不支持隊(duì)列的爬蟲。 所以我就先來(lái)舉一個(gè)例子,看一下這個(gè)爬蟲框架是多么簡(jiǎn)單并可用。

第一步:安裝 Crawl-pet

nodejs 就不用多介紹吧,用 npm 安裝 crawl-pet

$ npm install crawl-pet -g --production

運(yùn)行,程序會(huì)引導(dǎo)你完成配置,首次運(yùn)行,會(huì)在項(xiàng)目目錄下生成 info.json 文件

$ crawl-pet

> Set project dir: ./test-crawl-pet
> Create crawl-pet in ./test-crawl-pet [y/n]: y
> Set target url: http://foodshot.co/
> Set save rule [url/simple/group]: url
> Set file type limit: 
> The limit: not limit
> Set parser rule module:
> The module: use default crawl-pet.parser

這里使用的測(cè)試網(wǎng)站 http://foodshot.co/ 是一個(gè)自由版權(quán)的,分享美食圖片的網(wǎng)站,網(wǎng)站里的圖片質(zhì)量非常棒,這里用它只是為測(cè)試學(xué)習(xí)用,大家可以換其它網(wǎng)站測(cè)試

如果使用默認(rèn)解析器的話,已經(jīng)可以運(yùn)行,看看效果:

$ crawl-pet -o ./test-crawl-pet

試試看

這是下載后的目錄結(jié)構(gòu)

本地目錄結(jié)構(gòu)

 第二步:寫自己的解析器

現(xiàn)在我們來(lái)看一看如何寫自己的解析器,有三種方法來(lái)生成我們自己的解析器

在新建項(xiàng)目時(shí), 在 Set parser rule module 輸入自己的解釋器路徑。修改 info.json 下的 parser 項(xiàng)這個(gè)最簡(jiǎn)單,直接在項(xiàng)目錄下新建一個(gè) parser.js 文件

使用 crawl-pet, 新建一個(gè)解析器模板

$ crawl-pet --create-parser ./test-crawl-pet/parser.js

打開 ./test-crawl-pet/parser.js 文件

// crawl-pet 支持使用 cheerio,來(lái)進(jìn)行頁(yè)面分析,如果你有這個(gè)需要
const cheerio = require("cheerio")

/*
 * header 函數(shù)是在請(qǐng)求發(fā)送前調(diào)用,可以配置請(qǐng)求的頭信息,如果返回 false,則中斷請(qǐng)求
 *
 * 參數(shù):
 *  options:   詳細(xì)設(shè)置請(qǐng)看 https://github.com/request/request
 *  crawler_handle: 與隊(duì)列通信的對(duì)象,詳情見下
 *
 * header 函數(shù)是可選的,可不寫
 */
exports.header = function(options, crawler_handle) {  
}

/*
 * body 函數(shù)是在請(qǐng)求返回后調(diào)用,用來(lái)解析返回結(jié)果
 *
 * 參數(shù):
 *  url:   請(qǐng)求的 url
 *  body:   請(qǐng)求返回結(jié)果, string 類型
 *  response:  請(qǐng)求的響應(yīng),詳情請(qǐng)看: https://github.com/request/request
 *  crawler_handle: 與隊(duì)列通信的對(duì)象,該對(duì)象包含以下方法
 *   .info    : crawl-pet 的配置信息
 *   .uri     : 當(dāng)前請(qǐng)求的 uri 信息
 *   .addPage(url)  : 向隊(duì)列里添加一個(gè)待解析頁(yè)面
 *   .addDown(url)  : 向隊(duì)列里添加一個(gè)待下載文件
 *   .save(content, ext) : 保存文本到本地,ext 設(shè)置保存文件的后綴名
 *   .over()    : 結(jié)束當(dāng)前隊(duì)列,取出下一條隊(duì)列數(shù)據(jù)
 */

exports.body = function(url, body, response, crawler_handle) {
 const re = /\b(href|src)\s*=\s*["']([^'"#]+)/ig
 var m = null
 while (m = re.exec(body)){
  let href = m[2]
  if (/\.(png|gif|jpg|jpeg|mp4)\b/i.test(href)) {
    // 這理添加了一條下載
   crawler_handle.addDown(href)
  }else if(!/\.(css|js|json|xml|svg)/.test(href)){
    // 這理添加了一個(gè)待解析頁(yè)面
   crawler_handle.addPage(href)
  }
 }
  // 記得在解析結(jié)束后一定要執(zhí)行
 crawler_handle.over()
}

在最后會(huì)有一個(gè)分享,懂得的請(qǐng)往下看

第三步:查看爬取下來(lái)的數(shù)據(jù)

根據(jù)以下載到本地的文件,查找下載地址

$ crawl-pet -f ./test-crawl-pet/photos.foodshot.co/*.jpg


查找下載地址

查看等待隊(duì)列

$ crawl-pet -l queue


查看等待隊(duì)列

查看已下載的文件列表

復(fù)制代碼 代碼如下:
$ crawl-pet -l down # 查看已下載列表中第 0 條后的5條數(shù)據(jù) $ crawl-pet -l down,0,5 # --json 參數(shù)表示輸出格式為 json $ crawl-pet -l down,0,5 --json


已下載的文件

查看已解析頁(yè)面列表,參數(shù)與查看已下載的相同

復(fù)制代碼 代碼如下:
$ crawl-pet -l page

基本功能就這些了,看一下它的幫助吧

該爬蟲框架是開源的,GIthub 地址在這里:https://github.com/wl879/Crawl-pet

$ crawl-pet --help

 Crawl-pet options help:

 -u, --url  string    Destination address
 -o, --outdir string    Save the directory, Default use pwd
 -r, --restart      Reload all page
 --clear        Clear queue
 --save   string    Save file rules following options
          = url: Save the path consistent with url
          = simple: Save file in the project path
          = group: Save 500 files in one folder
 --types   array    Limit download file type
 --limit   number=5   Concurrency limit
 --sleep   number=200   Concurrent interval
 --timeout  number=180000  Queue timeout
 --proxy   string    Set up proxy
 --parser  string    Set crawl rule, it's a js file path!
          The default load the parser.js file in the project path
 --maxsize  number    Limit the maximum size of the download file
 --minwidth  number    Limit the minimum width of the download file
 --minheight  number    Limit the minimum height of the download file
 -i, --info       View the configuration file
 -l, --list  array    View the queue data 
          e.g. [page/down/queue],0,-1
 -f, --find  array    Find the download URL of the local file
 --json        Print result to json format
 -v, --version      View version
 -h, --help       View help

最后分享一個(gè)配置

$ crawl-pet -u https://www.reddit.com/r/funny/ -o reddit --save group

info.json

{
 "url": "https://www.reddit.com/r/funny/",
 "outdir": ".",
 "save": "group",
 "types": "",
 "limit": "5",
 "parser": "my_parser.js",
 "sleep": "200",
 "timeout": "180000",
 "proxy": "",
 "maxsize": 0,
 "minwidth": 0,
 "minheight": 0,


 "cookie": "over18=1"
}

my_parser.js

exports.body = function(url, body, response, crawler_handle) {
 const re = /\b(data-url|href|src)\s*=\s*["']([^'"#]+)/ig
 var m = null
 while (m = re.exec(body)){
  let href = m[2]
  if (/thumb|user|icon|\.(css|json|js|xml|svg)\b/i.test(href)) {
   continue
  }
  if (/\.(png|gif|jpg|jpeg|mp4)\b/i.test(href)) {
   crawler_handle.addDown(href)
   continue
  }
  if(/reddit\.com\/r\//i.test(href)){
   crawler_handle.addPage(href)
  }
 }
 crawler_handle.over()
}

如果你是了解 reddit 的,那就這樣了。

GIthub 地址在這里:https://github.com/wl879/Crawl-pet

本站下載地址:點(diǎn)擊下載

相關(guān)文章

  • 使用pm2管理node項(xiàng)目的流程步驟

    使用pm2管理node項(xiàng)目的流程步驟

    pm2?是?nodejs?的進(jìn)程管理器,默認(rèn)支持負(fù)載均衡,能夠守護(hù)進(jìn)程,還支持查看應(yīng)用運(yùn)行時(shí)的性能,資源占用情況等,本文給大家介紹了使用pm2管理node項(xiàng)目的流程步驟,需要的朋友可以參考下
    2025-03-03
  • mac下徹底卸載node和npm方法步驟

    mac下徹底卸載node和npm方法步驟

    我們經(jīng)常在卸載軟件的時(shí)候會(huì)遇到有殘留,這樣就很難去重新下載,本篇文章就來(lái)介紹mac下徹底卸載node和npm及重新安裝的方法,有需要的朋友可以借鑒參考下
    2021-09-09
  • Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫(kù)及頁(yè)面數(shù)據(jù)傳遞操作實(shí)例分析

    Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫(kù)及頁(yè)面數(shù)據(jù)傳遞操作實(shí)例分析

    這篇文章主要介紹了Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫(kù)及頁(yè)面數(shù)據(jù)傳遞操作,結(jié)合實(shí)例形式分析了node.js查詢MongoDB數(shù)據(jù)庫(kù)及vue前臺(tái)頁(yè)面渲染等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • 快速刪除node_modules的幾種方式小結(jié)

    快速刪除node_modules的幾種方式小結(jié)

    這篇文章主要介紹了快速刪除node_modules的幾種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 整理幾個(gè)關(guān)鍵節(jié)點(diǎn)深入理解nodejs

    整理幾個(gè)關(guān)鍵節(jié)點(diǎn)深入理解nodejs

    這篇文章主要介紹了整理幾個(gè)關(guān)鍵節(jié)點(diǎn)深入理解nodejs,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下,需要的小伙伴可以參考一下
    2022-07-07
  • Node.js數(shù)據(jù)庫(kù)鉤子的使用

    Node.js數(shù)據(jù)庫(kù)鉤子的使用

    本文主要介紹了Node.js數(shù)據(jù)庫(kù)鉤子的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Node.js API詳解之 assert模塊用法實(shí)例分析

    Node.js API詳解之 assert模塊用法實(shí)例分析

    這篇文章主要介紹了Node.js API詳解之 assert模塊用法,結(jié)合實(shí)例形式分析了Node.js API中assert模塊基本函數(shù)、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • node?NPM庫(kù)qs?iconv-lite字符串編碼轉(zhuǎn)換及解析URL查詢學(xué)習(xí)

    node?NPM庫(kù)qs?iconv-lite字符串編碼轉(zhuǎn)換及解析URL查詢學(xué)習(xí)

    這篇文章主要為大家介紹了node?NPM庫(kù)之qs解析URL查詢字符串及iconv-lite字符串編碼轉(zhuǎn)換學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Node.js利用斷言模塊assert進(jìn)行單元測(cè)試的方法

    Node.js利用斷言模塊assert進(jìn)行單元測(cè)試的方法

    最近在用Node寫一個(gè)實(shí)時(shí)聊天小應(yīng)用,其中就用到了單元測(cè)試,所以死下面這篇文章主要給大家介紹了關(guān)于Node.js利用斷言模塊assert進(jìn)行單元測(cè)試的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • node 使用 async 控制并發(fā)的方法

    node 使用 async 控制并發(fā)的方法

    這篇文章主要介紹了node 使用 async 控制并發(fā)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

萨迦县| 新和县| 吉安市| 沙洋县| 新龙县| 射阳县| 太谷县| 平塘县| 安乡县| 神池县| 左贡县| 凤冈县| 灌云县| 海宁市| 庆云县| 景宁| 禄劝| 通许县| 布尔津县| 论坛| 万源市| 成安县| 师宗县| 澄迈县| 谢通门县| 建瓯市| 宁武县| 锡林浩特市| 中山市| 柳河县| 大港区| 广昌县| 台州市| 潞西市| 黎川县| 庐江县| 太康县| 崇明县| 泌阳县| 通城县| 上思县|