国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 17:01:36
字體:
供稿:網(wǎng)友

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

第一步:安裝 Crawl-pet

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

$ npm install crawl-pet -g --production

運(yùn)行,程序會引導(dǎo)你完成配置,首次運(yùn)行,會在項目目錄下生成 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/ 是一個自由版權(quán)的,分享美食圖片的網(wǎng)站,網(wǎng)站里的圖片質(zhì)量非常棒,這里用它只是為測試學(xué)習(xí)用,大家可以換其它網(wǎng)站測試

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

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


試試看

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


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

 第二步:寫自己的解析器

現(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,來進(jìn)行頁面分析,如果你有這個需要const cheerio = require("cheerio")/* * header 函數(shù)是在請求發(fā)送前調(diào)用,可以配置請求的頭信息,如果返回 false,則中斷請求 * * 參數(shù): *  options:   詳細(xì)設(shè)置請看 https://github.com/request/request *  crawler_handle: 與隊列通信的對象,詳情見下 * * header 函數(shù)是可選的,可不寫 */exports.header = function(options, crawler_handle) {  }/* * body 函數(shù)是在請求返回后調(diào)用,用來解析返回結(jié)果 * * 參數(shù): *  url:   請求的 url *  body:   請求返回結(jié)果, string 類型 *  response:  請求的響應(yīng),詳情請看: https://github.com/request/request *  crawler_handle: 與隊列通信的對象,該對象包含以下方法 *   .info    : crawl-pet 的配置信息 *   .uri     : 當(dāng)前請求的 uri 信息 *   .addPage(url)  : 向隊列里添加一個待解析頁面 *   .addDown(url)  : 向隊列里添加一個待下載文件 *   .save(content, ext) : 保存文本到本地,ext 設(shè)置保存文件的后綴名 *   .over()    : 結(jié)束當(dāng)前隊列,取出下一條隊列數(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)  } }  // 記得在解析結(jié)束后一定要執(zhí)行 crawler_handle.over()}

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

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

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

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


查找下載地址

查看等待隊列

$ crawl-pet -l queue


查看等待隊列

查看已下載的文件列表

復(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


已下載的文件

查看已解析頁面列表,參數(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

最后分享一個配置

$ 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)擊下載

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 翁源县| 东莞市| 沙雅县| 图木舒克市| 古丈县| 招远市| 兴城市| 板桥市| 麻城市| 巨鹿县| 衡东县| 屯门区| 工布江达县| 昌邑市| 海门市| 林州市| 临西县| 昌都县| 醴陵市| 东乌珠穆沁旗| 宁远县| 潢川县| 玉环县| 广河县| 韶山市| 绿春县| 沽源县| 永州市| 浪卡子县| 乐亭县| 武宁县| 石狮市| 钦州市| 壤塘县| 郸城县| 延津县| 贵溪市| 庆阳市| 宜君县| 左权县| 兴化市|