日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nodejs 批量检测 Excel 中url链接是否可访问

發布時間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nodejs 批量检测 Excel 中url链接是否可访问 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近領導給我一個Excel表格,讓我檢查下其中的 Url 是否有效。作為一個開發人員,我內心是拒絕的,一個一個點擊測試,估計手抽筋也測試不完。我想,人類的進步,源于使用工具,那我就寫個程序跑一下吧,然后我去喝杯茶。

思路

  • 讀取 Excel 中數據
  • 檢測 url 是否有效
  • 把數據寫入 Excel
  • 檢查核對下數據
  • Excel 格式示例

    序號分類名稱網址狀態
    1A類某某網http://www.xxx.com/未檢測
    2A類某某網http://www.xxx.com/未檢測
    3A類某某網http://www.xxx.com/xxx未檢測

    擼起袖子,動手干吧

    根據思路, 整理下代碼吧
    新建 index.js

    const urlIsSuccess = require('./urlIsSuccess') const { readSheets, getSheet, sheetsBuffer, writeFile } = require('./xlsx')const entryfilePath = `${ __dirname }/test.xlsx` // 輸入的 Excel 文件 const outFilePath = `${ __dirname }/out_test.xlsx` // 輸出的 Excel 文件 const sheetIndex = 0; // Excel 的 Sheet 索引 const urlColIndex = 3 // Excel 中 網址 所在的列索引 const statusColIndex = 4 // Excel 中 狀態 所在的列索引let sheets = readSheets(entryfilePath) // 讀取 Excel 中數據 const sheet = getSheet(sheets, sheetIndex) // 讀取 Excel 中 Sheet 數據const isUrl = url => {if (!url) return falsereturn /\s*http(s)?:\/\/.+/.test(url) }// 循環sheet表中的行數據 // 返回一個Promise數組, 用于 Promise.all 使用 let promises = sheet.map(rows => {const url = rows[ urlColIndex ]if (isUrl(url)) {return urlIsSuccess(url).then(res => {// 返回檢測的狀態碼, 寫入狀態格rows[ statusColIndex ] = resreturn Promise.resolve(rows)})}return Promise.resolve(rows) })Promise.all(promises).then((res) => {sheets[ sheetIndex ].data = res;const buffer = sheetsBuffer(sheets)writeFile(buffer, outFilePath) }).catch(err => {console.log('err=', err) })

    操作 Excel 中數據

    需要安裝node-xlsx npm install node-xlsx --save
    新建 xlsx.js

    const fs = require("fs") const xlsx = require('node-xlsx').default; // 讀取Excel表全部數據 const readSheets = (filePath) => {if (!filePath) return []return xlsx.parse(filePath) } // 讀取Excel表中Sheet數據 const getSheet = (sheets, nameOrIndex) => {if (nameOrIndex === undefined) return sheetsif (typeof nameOrIndex === 'string') {return sheets.find(sheet => nameOrIndex === sheet.name)?.data}if (typeof nameOrIndex === 'number') {return sheets[ nameOrIndex ]?.data}throw new Error(`nameOrIndex 不合法: ${ nameOrIndex }`) }const sheetsBuffer = (sheets) => {if (!sheets) {throw new Error(`sheets 參數是必填項`)}return xlsx.build(sheets) };// 寫入文件,需要提前手動創建 const writeFile = (buffer, outFilePath) => {fs.writeFile(outFilePath, buffer, function (err) {if (err) {console.log("寫入失敗: " + err);return;}console.log("寫入完成");}); }module.exports = {readSheets,getSheet,sheetsBuffer,writeFile }

    檢測 url 是否有效

    使用 nodejs 的 child_process.exec(),調用 命令行curl命令, 根據返回的錯誤狀態碼或者HTTP狀態碼,判斷 URL 是否有效
    新建 urlIsSuccess.js

    const child_process = require("child_process");const urlIsSuccess = (url) => {if (!url) {return Promise.resolve('')}// 微信內置瀏覽器 "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0"const userAgent = '-A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"'const curl = `curl -I ${ userAgent } ${ url }`return new Promise((resolve, reject) => {child_process.exec(curl, function (err, stdout, stderr) {console.log(url, '完成')if (err) {resolve(err.code || '失敗')return}let status = stdout.split('\n')if (status.length) {let code = status[ 0 ].match(/\s(\d{3})\s/)if (code && code[ 1 ]) {status = +code[ 1 ]}}if (!status) {status = stdout;}resolve(status || '成功')});})}module.exports = urlIsSuccess;

    注意

    有部分網站,做了人機檢測, 需要對請求頭等進行配置,否則通過curl訪問會失敗

    總結

    以上是生活随笔為你收集整理的Nodejs 批量检测 Excel 中url链接是否可访问的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。