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

簡單好用的nodejs 爬蟲框架分享

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

這個就是一篇介紹爬蟲框架的文章,開頭就不說什么劇情了。什么最近一個項目了,什么分享新知了,劇情是挺好,但介紹的很初級,根本就沒有辦法應用,不支持隊列的爬蟲。 所以我就先來舉一個例子,看一下這個爬蟲框架是多么簡單并可用。

第一步:安裝 Crawl-pet

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

$ npm install crawl-pet -g --production

運行,程序會引導你完成配置,首次運行,會在項目目錄下生成 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

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

如果使用默認解析器的話,已經可以運行,看看效果:

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

試試看

這是下載后的目錄結構

本地目錄結構

 第二步:寫自己的解析器

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

在新建項目時, 在 Set parser rule module 輸入自己的解釋器路徑。修改 info.json 下的 parser 項這個最簡單,直接在項目錄下新建一個 parser.js 文件

使用 crawl-pet, 新建一個解析器模板

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

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

// crawl-pet 支持使用 cheerio,來進行頁面分析,如果你有這個需要
const cheerio = require("cheerio")

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

/*
 * body 函數(shù)是在請求返回后調用,用來解析返回結果
 *
 * 參數(shù):
 *  url:   請求的 url
 *  body:   請求返回結果, string 類型
 *  response:  請求的響應,詳情請看: https://github.com/request/request
 *  crawler_handle: 與隊列通信的對象,該對象包含以下方法
 *   .info    : crawl-pet 的配置信息
 *   .uri     : 當前請求的 uri 信息
 *   .addPage(url)  : 向隊列里添加一個待解析頁面
 *   .addDown(url)  : 向隊列里添加一個待下載文件
 *   .save(content, ext) : 保存文本到本地,ext 設置保存文件的后綴名
 *   .over()    : 結束當前隊列,取出下一條隊列數(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)){
    // 這理添加了一個待解析頁面
   crawler_handle.addPage(href)
  }
 }
  // 記得在解析結束后一定要執(zhí)行
 crawler_handle.over()
}

在最后會有一個分享,懂得的請往下看

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

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

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


查找下載地址

查看等待隊列

$ crawl-pet -l queue


查看等待隊列

查看已下載的文件列表

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


已下載的文件

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

復制代碼 代碼如下:
$ 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

最后分享一個配置

$ 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

本站下載地址:點擊下載

相關文章

  • nodeJs爬蟲獲取數(shù)據(jù)簡單實現(xiàn)代碼

    nodeJs爬蟲獲取數(shù)據(jù)簡單實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了nodeJs爬蟲獲取數(shù)據(jù)簡單實現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 通過nodejs 服務器讀取HTML文件渲染到頁面的方法

    通過nodejs 服務器讀取HTML文件渲染到頁面的方法

    今天小編就為大家分享一篇通過nodejs 服務器讀取HTML文件渲染到頁面的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Node.js和MongoDB實現(xiàn)簡單日志分析系統(tǒng)

    Node.js和MongoDB實現(xiàn)簡單日志分析系統(tǒng)

    這篇文章主要介紹了Node.js和MongoDB實現(xiàn)簡單日志分析系統(tǒng),本文給出了服務器端、客戶端、圖表生成、Shell自動執(zhí)行等功能的實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Node定時備份MySQL的實現(xiàn)

    Node定時備份MySQL的實現(xiàn)

    本文主要介紹了Node定時備份MySQL的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 剖析Node.js異步編程中的回調與代碼設計模式

    剖析Node.js異步編程中的回調與代碼設計模式

    這篇文章主要介紹了Node.js異步編程中的回調與代碼設計模式,雖然大多數(shù)場合回調編寫時的長串括號不怎么好看,但Node的異步性能確實很好,需要的朋友可以參考下
    2016-02-02
  • 使用node搭建自動發(fā)圖文微博機器人的方法

    使用node搭建自動發(fā)圖文微博機器人的方法

    這篇文章主要介紹了使用node搭建自動發(fā)圖文微博機器人的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 一步步教你利用Docker設置Node.js

    一步步教你利用Docker設置Node.js

    這篇文章主要介紹了利用Docker設置Node.js的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • Node.js開發(fā)之套接字(socket)編程入門示例

    Node.js開發(fā)之套接字(socket)編程入門示例

    這篇文章主要介紹了Node.js開發(fā)之套接字(socket)編程,結合簡單實例形式分析了node.js套接字socket客戶端與服務器端相關實現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-11-11
  • 基于Node.js實現(xiàn)一鍵生成個性化二維碼

    基于Node.js實現(xiàn)一鍵生成個性化二維碼

    這篇文章主要為大家詳細介紹了如何使用Node.js、Jimp和QRCode庫,結合一個簡單的腳本,通過命令行命令來快速給二維碼加上指定的背景,打造更有個性化的二維碼,感興趣的可以了解下
    2024-03-03
  • Node.js 多進程處理CPU密集任務的實現(xiàn)

    Node.js 多進程處理CPU密集任務的實現(xiàn)

    這篇文章主要介紹了Node.js 多進程處理CPU密集任務的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05

最新評論