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

首頁 > 語言 > JavaScript > 正文

nodejs通過phantomjs實(shí)現(xiàn)下載網(wǎng)頁

2024-05-06 16:19:12
字體:
供稿:網(wǎng)友

這篇文章主要介紹了nodejs通過phantomjs實(shí)現(xiàn)下載網(wǎng)頁的方法,有需要的小伙伴可以參考下。

功能其實(shí)很見簡(jiǎn)單,通過 phantomjs.exe 采集 url 加載的資源,通過子進(jìn)程的方式,啟動(dòng)nodejs 加載所有的資源,對(duì)于css的資源,匹配css內(nèi)容,下載里面的url資源

當(dāng)然功能還是很簡(jiǎn)單的,在響應(yīng)式設(shè)計(jì)和異步加載的情況下,還是有很多資源沒有能夠下載,需要根據(jù)實(shí)際情況處理下

首先當(dāng)然是下載 nodejs 和 phantomjs

下面是 phantomjs.exe 執(zhí)行的 down.js

 

 
  1. var page = require('webpage').create(), 
  2. system = require('system'); 
  3. var spawn = require("child_process").spawn 
  4.  
  5. if (system.args.length === 1) { 
  6. console.log('Usage: netsniff.js <some URL>'); 
  7. phantom.exit(1); 
  8. else { 
  9. var urls = []; 
  10. page.address = system.args[1]; 
  11. page.onResourceReceived = function (res) { 
  12. if (res.stage === 'start') { 
  13. urls.push(res.url); 
  14. }; 
  15. page.open(page.address, function (status) { 
  16. var har; 
  17. if (status !== 'success') { 
  18. console.log('FAIL to load the address'); 
  19. phantom.exit(1); 
  20. else { 
  21. console.log('down resource ' + urls.length + ' urls.'); 
  22. var child = spawn("node", ["--harmony""downHtml.js", urls.join(',')]) 
  23. child.stdout.on("data"function (data) { 
  24. console.log(data); 
  25. }) 
  26. child.stderr.on("data"function (data) { 
  27. console.log(data); 
  28. }) 
  29. child.on("exit"function (code) { 
  30. phantom.exit(); 
  31. })  
  32. }); 

下面是對(duì)應(yīng)的node運(yùn)行的 downHtml.js

 

 
  1. "use strict"
  2. var fs = require('fs'); 
  3. var http = require('http'); 
  4. var path = require('path'); 
  5. var r_url = require('url'); 
  6.  
  7. var dirCache = {};//緩存減少判斷 
  8. function makedir (pathStr, callback) { 
  9. if (dirCache[pathStr] == 1) { 
  10. callback(); 
  11. else { 
  12. fs.exists(pathStr, function (exists) { 
  13. if (exists == true) { 
  14. dirCache[pathStr] == 1; 
  15. callback(); 
  16. else { 
  17. makedir(path.dirname(pathStr), function () { 
  18. fs.mkdir(pathStr, function () { 
  19. dirCache[pathStr] == 1; 
  20. callback(); 
  21. }) 
  22. }); 
  23. }) 
  24. }; 
  25.  
  26. var reg = /[:,]/s*url/(['"]?.*?(/1)/)/g 
  27. var reg2 = //((['"]?)(.*?)(/1)/)/ 
  28. var isDownMap = {}; 
  29. var downImgFromCss = function (URL) { 
  30. http.get(URL, function(res) { 
  31. //console.log(path.resolve(process.cwd(), 'index.min.css')) 
  32. //res.pipe(fs.createWriteStream(path.resolve(process.cwd(), 'index.min.css'))); 
  33. var body = ""
  34. res.setEncoding('utf8'); 
  35. res.on('data'function (chunk) { 
  36. body += chunk; 
  37. }); 
  38. res.on('end'function () { 
  39. var match = body.match(reg); 
  40. for (var i = 0, len = match.length; i < len; i++){ 
  41. var m = match[i].match(reg2); 
  42. if (m && m[2]) { 
  43. var url = m[2]; 
  44. let imgUrl = r_url.resolve(URL, url); 
  45. if (!isDownMap[imgUrl]) { 
  46. var uo = r_url.parse(imgUrl); 
  47. let filepath = CWD + '/' + uo.hostname + uo.pathname; 
  48. makedir(path.dirname(filepath), function () { 
  49. http.get(imgUrl, function (res) { 
  50. res.pipe(fs.createWriteStream(filepath)); 
  51. }) 
  52. }) 
  53. isDownMap[imgUrl] = 1; 
  54. }); 
  55. }); 
  56.  
  57. var URLS = process.argv[2].split(','); 
  58. var CWD = process.cwd(); 
  59. //下載資源 
  60. URLS.forEach(function (URL) { 
  61. var uo = r_url.parse(URL); 
  62. var filepath; 
  63. if (uo.pathname == '/' || uo.pathname == '') { 
  64. filepath = CWD + '/' + uo.hostname + '/index.html'
  65. else { 
  66. filepath = CWD + '/' + uo.hostname + uo.pathname; 
  67. makedir(path.dirname(filepath), function () { 
  68. http.get(URL, function (res) { 
  69. if (URL.indexOf('.css') != -1 || (res.headers["content-type"] && res.headers["content-type"].indexOf('text/css')!= -1)) { 
  70. console.log('down images form css file:' + URL + '.'); 
  71. downImgFromCss(URL); 
  72. res.pipe(fs.createWriteStream(filepath)); 
  73. }) 
  74. }); 
  75. }); 

down.js downHtml.js 放在同一個(gè)文件夾下 通過下列 cmd 運(yùn)行

D:/phantomjs-2.0.0-windows/bin/phantomjs.exe down.jshttp://www.youku.com/

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 天祝| 精河县| 衢州市| 轮台县| 灌云县| 玉环县| 双峰县| 和田市| 方正县| 朔州市| 鄢陵县| 海伦市| 万州区| 金门县| 灵川县| 凤台县| 拜泉县| 巴青县| 阿勒泰市| 万年县| 五寨县| 临颍县| 徐州市| 沂水县| 渑池县| 岚皋县| 磴口县| 玛纳斯县| 平昌县| 榆林市| 广昌县| 石渠县| 兰溪市| 和硕县| 乌兰浩特市| 宜阳县| 科技| 理塘县| 金寨县| 吉木萨尔县| 临漳县|