java爬蟲實戰

本人目前在做魚皮的《智能協同云圖庫》,涉及到了以圖搜圖+圖片爬取,雖然以前有爬過圖片,但是用的都是別人現成的代碼,不怎么去理解為什么要這樣做,這次有在嘗試理解每一個步驟。本人基礎極差,屬于一點基礎也沒學直接上手做項目的那種類型,所以跟課程有點吃力。但好在gpt非常好用,也算是勉強能夠理解了。在這里總結一下思路。

百度的以圖搜圖可以通過上傳url進行,我選擇這個url的圖片。

https://i2.hdslb.com/bfs/archive/ad698e40cc6dd3d03ae5d0ab7bfa50faf368bd9b.jpg

然后就可以出現這個:

然后可以打開Safari網頁檢查器(如果不是Safari,應該是開發者工具)

只看XHR類型就可以,也就是只顯示接口請求。

記得設置保留日志,因為會有一閃而過的upload。別的網站也可能是別的名字,比如pcsearch這種。

把搜索的網址輸進去,再重新搜一遍,會出現:

然后需要關注標頭中的內容。

展開請求數據后,可以得到:

sdkParams?通常是由百度官方 SDK 生成的簽名參數,里面可能是時間戳、簽名、密鑰哈希等。這里不需要管它。

package com.bxt.picturebackend.imageSearch.sub;import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.bxt.picturebackend.exception.BusinessException;
import com.bxt.picturebackend.exception.ErrorCode;
import lombok.extern.slf4j.Slf4j;import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.HexFormat;
import java.util.Map;@Slf4j
public class GetImagePageUrlApi {public static String getImagePageUrl(String imageUrl) {Map<String, Object> formData = new HashMap<>();formData.put("image", imageUrl);formData.put("tn","pc");formData.put("from", "pc");formData.put("image_source", "PC_UPLOAD_URL");long upTime = System.currentTimeMillis();String postUrl = "https://graph.baidu.com/upload?uptime="+ upTime;String acsToken = "jmM4zyI8OUixvSuWh0sCy4xWbsttVMZb9qcRTmn6SuNWg0vCO7N0s6Lffec+IY5yuqHujHmCctF9BVCGYGH0H5SH/H3VPFUl4O4CP1jp8GoAzuslb8kkQQ4a21Tebge8yhviopaiK66K6hNKGPlWt78xyyJxTteFdXYLvoO6raqhz2yNv50vk4/41peIwba4lc0hzoxdHxo3OBerHP2rfHwLWdpjcI9xeu2nJlGPgKB42rYYVW50+AJ3tQEBEROlg/UNLNxY+6200B/s6Ryz+n7xUptHFHi4d8Vp8q7mJ26yms+44i8tyiFluaZAr66/+wW/KMzOhqhXCNgckoGPX1SSYwueWZtllIchRdsvCZQ8tFJymKDjCf3yI/Lw1oig9OKZCAEtiLTeKE9/CY+Crp8DHa8Tpvlk2/i825E3LuTF8EQfzjcGpVnR00Lb4/8A";try {HttpResponse httpResponse=HttpRequest.post(postUrl).form(formData).timeout(10000).header("Acs-Token", acsToken).execute();if (httpResponse.getStatus() != 200) {log.error("獲取以圖搜圖頁面地址失敗,狀態碼:{}", httpResponse.getStatus());throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}String body = httpResponse.body();System.out.println("body = " + body);Map<String, Object> responseMap = JSONUtil.toBean(body, Map.class);System.out.println("responseMap = " + responseMap);if (responseMap == null ) {log.error("獲取以圖搜圖頁面地址失敗,響應內容:{}", body);throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}Map<String, Object> data = (Map<String, Object>) responseMap.get("data");System.out.println("data = " + data);String rawUrl = (String) data.get("url");// 對 URL 進行解碼String searchResultUrl = URLUtil.decode(rawUrl, StandardCharsets.UTF_8);// 如果 URL 為空if (searchResultUrl == null) {throw new BusinessException(ErrorCode.OPERATION_ERROR, "未返回有效結果");}return searchResultUrl;}catch (Exception e) {log.error("獲取以圖搜圖頁面地址失敗,錯誤信息:{}", e.getMessage());throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}}
}

用單元測試類測試:

package com.bxt.picturebackend.imageSearch.sub;import cn.hutool.http.HttpResponse;
import com.mysql.cj.x.protobuf.MysqlxResultset;
import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;class GetImagePageUrlApiTest {@Testvoid testGetImagePageUrl() {String testImageUrl = "https://i2.hdslb.com/bfs/archive/ad698e40cc6dd3d03ae5d0ab7bfa50faf368bd9b.jpg";String response = GetImagePageUrlApi.getImagePageUrl(testImageUrl);System.out.println(response);}
}

可以得到:

body = {"status":0,"msg":"Success","data":{"url":"https://graph.baidu.com/s?card_key=\u0026entrance=GENERAL\u0026extUiData%5BisLogoShow%5D=1\u0026f=all\u0026isLogoShow=1\u0026session_id=13377293787626920489\u0026sign=1260533cc766d268eaf8401755063018\u0026tpl_from=pc","sign":"1260533cc766d268eaf8401755063018"}}
responseMap = {status=0, msg=Success, data={"url":"https://graph.baidu.com/s?card_key=&entrance=GENERAL&extUiData%5BisLogoShow%5D=1&f=all&isLogoShow=1&session_id=13377293787626920489&sign=1260533cc766d268eaf8401755063018&tpl_from=pc","sign":"1260533cc766d268eaf8401755063018"}}
data = {"url":"https://graph.baidu.com/s?card_key=&entrance=GENERAL&extUiData%5BisLogoShow%5D=1&f=all&isLogoShow=1&session_id=13377293787626920489&sign=1260533cc766d268eaf8401755063018&tpl_from=pc","sign":"1260533cc766d268eaf8401755063018"}
https://graph.baidu.com/s?card_key=&entrance=GENERAL&extUiData[isLogoShow]=1&f=all&isLogoShow=1&session_id=13377293787626920489&sign=1260533cc766d268eaf8401755063018&tpl_from=pcProcess finished with exit code 0

這里得到的url就是返回的頁面。

然后可以繼續分析這個頁面

只過濾文稿,可以得到這個頁面的html

因為需要的圖片位于“相似圖片”下方,所以可以去“相似圖片”周邊找一下

firsturl看起來是有用的。

把后邊跟著的那一串字符摘過來:

https:\/\/graph.baidu.com\/ajax\/pcsimi?carousel=503&entrance=GENERAL&extUiData%5BisLogoShow%5D=1&inspire=general_pc&limit=30&next=2&render_type=card&session_id=13377293787626920489&sign=1260533cc766d268eaf8401755063018&tk=2e59f&tpl_from=pc

需要稍微改一下,因為其中反斜杠?\?是?JSON 字符串里對斜杠?/?的轉義,屬于 JSON 格式要求,不是 URL 本身的內容。

把所有的反斜杠“\”都去掉,可以得到下邊的網址:

https://graph.baidu.com/ajax/pcsimi?carousel=503&entrance=GENERAL&extUiData%5BisLogoShow%5D=1&inspire=general_pc&limit=30&next=2&render_type=card&session_id=13377293787626920489&sign=1260533cc766d268eaf8401755063018&tk=2e59f&tpl_from=pc

輸入這個網址,可以得到如下頁面:

thumbUrl后邊跟著的字符串,是我們需要的內容

可是,直接把它粘過來進行搜索,是會出錯的

原因主要是轉義字符寫法錯誤,具體問題包括:
URL中出現了錯誤的轉義寫法 /u0026,這是 Unicode 轉義符,表示字符 &。但在 URL 中不能直接寫成 /u0026,正確的是用 & 連接參數。同樣的,末尾的 \u0026h=500 也寫成了 \u0026,這不是有效的 URL 字符。

改成正確的格式,比如這樣:

http://mms1.baidu.com/it/u=771534300,3396233686&fm=253&app=138&f=JPEG?w=800&h=500

就可以正常顯示了

補充之前的代碼,完整版如下,調用getUrlList可以返回相似圖片的url

package com.bxt.picturebackend.imageSearch.sub;import cn.hutool.core.util.URLUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.bxt.picturebackend.exception.BusinessException;
import com.bxt.picturebackend.exception.ErrorCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.web.firewall.FirewalledRequest;import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.HexFormat;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import static cn.hutool.poi.excel.sax.AttributeName.r;@Slf4j
public class GetImagePageUrlApi {public static List<String> getUrlList(String imageUrl){String imagePageUrl = getImagePageUrl(imageUrl);if (imagePageUrl == null || imagePageUrl.isEmpty()) {throw new BusinessException(ErrorCode.OPERATION_ERROR, "未返回有效結果");}String acsToken = "jmM4zyI8OUixvSuWh0sCy4xWbsttVMZb9qcRTmn6SuNWg0vCO7N0s6Lffec+IY5yuqHujHmCctF9BVCGYGH0H5SH/H3VPFUl4O4CP1jp8GoAzuslb8kkQQ4a21Tebge8yhviopaiK66K6hNKGPlWt78xyyJxTteFdXYLvoO6raqhz2yNv50vk4/41peIwba4lc0hzoxdHxo3OBerHP2rfHwLWdpjcI9xeu2nJlGPgKB42rYYVW50+AJ3tQEBEROlg/UNLNxY+6200B/s6Ryz+n7xUptHFHi4d8Vp8q7mJ26yms+44i8tyiFluaZAr66/+wW/KMzOhqhXCNgckoGPX1SSYwueWZtllIchRdsvCZQ8tFJymKDjCf3yI/Lw1oig9OKZCAEtiLTeKE9/CY+Crp8DHa8Tpvlk2/i825E3LuTF8EQfzjcGpVnR00Lb4/8A";HttpResponse httpResponse = HttpRequest.get(imagePageUrl).timeout(10000).header("Acs-Token", acsToken).execute();
//        System.out.println("httpResponse = " + httpResponse);if (httpResponse.getStatus() != 200) {log.error("獲取以圖搜圖頁面地址失敗,狀態碼:{}", httpResponse.getStatus());throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}Pattern pattern = Pattern.compile("\"firstUrl\"\\s*:\\s*\"(.*?)\"");Matcher matcher = pattern.matcher(httpResponse.body());String firstUrl;if (matcher.find()) {// 提取并替換 \/ 為 /firstUrl = matcher.group(1).replace("\\/", "/");System.out.println("firstUrl = " + firstUrl);} else {throw new BusinessException(ErrorCode.OPERATION_ERROR, "未返回有效結果");}HttpResponse urlListPage = HttpRequest.get(firstUrl).timeout(10000).header("Acs-Token", acsToken).execute();
//        System.out.println(urlListPage);pattern = Pattern.compile("\"thumbUrl\"\\s*:\\s*\"(.*?)\"");matcher = pattern.matcher(urlListPage.body());List<String> urlList = new java.util.ArrayList<>();while (matcher.find()) {String thumbUrl = matcher.group(1);// 轉義 \u0026 -> &thumbUrl = thumbUrl.replaceAll("\\\\u0026", "&");urlList.add(thumbUrl);}
//        System.out.println("urlList = " + urlList);return urlList;}public static String getImagePageUrl(String imageUrl) {Map<String, Object> formData = new HashMap<>();formData.put("image", imageUrl);formData.put("tn","pc");formData.put("from", "pc");formData.put("image_source", "PC_UPLOAD_URL");long upTime = System.currentTimeMillis();String postUrl = "https://graph.baidu.com/upload?uptime="+ upTime;String acsToken = "jmM4zyI8OUixvSuWh0sCy4xWbsttVMZb9qcRTmn6SuNWg0vCO7N0s6Lffec+IY5yuqHujHmCctF9BVCGYGH0H5SH/H3VPFUl4O4CP1jp8GoAzuslb8kkQQ4a21Tebge8yhviopaiK66K6hNKGPlWt78xyyJxTteFdXYLvoO6raqhz2yNv50vk4/41peIwba4lc0hzoxdHxo3OBerHP2rfHwLWdpjcI9xeu2nJlGPgKB42rYYVW50+AJ3tQEBEROlg/UNLNxY+6200B/s6Ryz+n7xUptHFHi4d8Vp8q7mJ26yms+44i8tyiFluaZAr66/+wW/KMzOhqhXCNgckoGPX1SSYwueWZtllIchRdsvCZQ8tFJymKDjCf3yI/Lw1oig9OKZCAEtiLTeKE9/CY+Crp8DHa8Tpvlk2/i825E3LuTF8EQfzjcGpVnR00Lb4/8A";try {HttpResponse httpResponse=HttpRequest.post(postUrl).form(formData).timeout(10000).header("Acs-Token", acsToken).execute();if (httpResponse.getStatus() != 200) {log.error("獲取以圖搜圖頁面地址失敗,狀態碼:{}", httpResponse.getStatus());throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}String body = httpResponse.body();System.out.println("body = " + body);Map<String, Object> responseMap = JSONUtil.toBean(body, Map.class);System.out.println("responseMap = " + responseMap);if (responseMap == null ) {log.error("獲取以圖搜圖頁面地址失敗,響應內容:{}", body);throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}Map<String, Object> data = (Map<String, Object>) responseMap.get("data");System.out.println("data = " + data);String rawUrl = (String) data.get("url");// 對 URL 進行解碼String searchResultUrl = URLUtil.decode(rawUrl, StandardCharsets.UTF_8);// 如果 URL 為空if (searchResultUrl == null) {throw new BusinessException(ErrorCode.OPERATION_ERROR, "未返回有效結果");}return searchResultUrl;}catch (Exception e) {log.error("獲取以圖搜圖頁面地址失敗,錯誤信息:{}", e.getMessage());throw new RuntimeException("獲取以圖搜圖頁面地址失敗,請稍后重試");}}
}

輸出最后的list,是這樣的:

[http://mms1.baidu.com/it/u=771534300,3396233686&fm=253&app=138&f=JPEG?w=800&h=500, http://mms0.baidu.com/it/u=4161103281,1829674203&fm=253&app=138&f=JPEG?w=749&h=580, http://mms2.baidu.com/it/u=2706284301,789398194&fm=253&app=120&f=JPEG?w=800&h=500, http://mms1.baidu.com/it/u=1667096992,1485299432&fm=253&app=138&f=JPEG?w=800&h=500, http://mms0.baidu.com/it/u=2502213264,439196765&fm=253&app=120&f=JPEG?w=800&h=500, http://mms0.baidu.com/it/u=4000521229,3982402882&fm=253&app=120&f=JPEG?w=655&h=446, http://mms2.baidu.com/it/u=640527677,1986438968&fm=253&app=138&f=JPEG?w=455&h=256, http://mms2.baidu.com/it/u=156995109,2192672339&fm=253&app=120&f=JPEG?w=801&h=500, http://mms0.baidu.com/it/u=48011703,2549638517&fm=253&app=138&f=JPEG?w=800&h=500, http://mms2.baidu.com/it/u=1316957924,1711619045&fm=253&app=120&f=JPEG?w=800&h=500, http://mms0.baidu.com/it/u=2192255561,2552189568&fm=253&app=138&f=JPEG?w=634&h=356, http://mms0.baidu.com/it/u=2868092005,3149855400&fm=253&app=138&f=JPEG?w=500&h=500, http://mms0.baidu.com/it/u=2173262737,1364469520&fm=253&app=138&f=JPEG?w=500&h=500, http://mms0.baidu.com/it/u=896380067,3285805132&fm=253&app=138&f=JPEG?w=1053&h=800, http://mms0.baidu.com/it/u=184083361,1291046512&fm=253&app=138&f=JPEG?w=500&h=500, http://mms0.baidu.com/it/u=2147020713,3191068967&fm=253&app=138&f=JPEG?w=867&h=500, http://mms0.baidu.com/it/u=864737700,3400231159&fm=253&app=120&f=JPEG?w=800&h=500, http://mms1.baidu.com/it/u=153299186,2018689789&fm=253&app=120&f=JPEG?w=480&h=270, http://mms0.baidu.com/it/u=2253215478,3249860676&fm=253&app=120&f=JPEG?w=800&h=500, http://mms2.baidu.com/it/u=3522373714,3342355003&fm=253&app=120&f=JPEG?w=800&h=500]
?

全部都是坤坤

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93053.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93053.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93053.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入詳解C語言的循環結構:while循環、do-while循環、for循環,結合實例,講透C語言的循環結構

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題、C/C干貨分享&學習過程記錄 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#…

北京-4年功能測試2年空窗-報培訓班學測開-第七十四天-線下面試-聊的很滿意但可能有風險-等信吧

今天沒去教室&#xff0c;因為下午有個線下面試。其實是可以去教室的&#xff0c;但我實在太焦慮了&#xff0c;我覺得去了教室我心情會更不好&#xff0c;什么都干不下去&#xff0c;所以我選擇不去早上依舊是帶著滿滿焦慮起來的&#xff0c;會覺得自己的一切都不令自己滿意&a…

在ubuntu服務器下安裝cuda和cudnn(筆記)

目錄 0 引言 1 相關環境查詢 2 安裝cuda 2.1 下載并安裝 2.2 安裝選項配置 2.3 驗證安裝 3 安裝cudnn 3.1 下載 3.2 解壓 3.3 刪除舊版本 cuDNN 3.4 復制新文件到 CUDA 目錄 3.5 設置文件權限 3.6 創建軟鏈接 3.7 驗證安裝 0 引言 我在使用服務器的cuda11.8的時…

docker安裝centos

docker庫地址https://hub.docker.com/ 嘗試使用centos7試了幾次超時 換了個版本就可以了 docker pull centos:centos7.9.2009有時候需要更新資源地址 可以使用 vim /etc/docker/daemon.json配置其他資源地址 {"registry-mirrors": ["http://hub-mirror.c.163…

內容索引之word轉md工具 - markitdown

切分文檔構建RAG庫過程中&#xff0c;langchain、llamaindex更期望處理latex、md類帶有顯式結構文檔。 langchain、llamaindex切分word&#xff0c;有可能將段落中間截斷&#xff0c;導致切分后的塊語義不完整。 所以&#xff0c;需要先將word轉化為md格式&#xff0c;然后再…

MaxKB+合合信息TextIn:通過API實現PDF掃描件的文檔審核

上海合合信息科技股份有限公司&#xff08;以下簡稱為合合信息&#xff09;是一家深耕人工智能、OCR&#xff08;光學字符識別&#xff09;及商業大數據技術領域的科技企業。該公司擁有領先的智能文字識別技術&#xff0c;其名片全能王&#xff08;CamCard&#xff09;、掃描全…

MyBatis 核心入門:從概念到實戰,一篇掌握簡單增刪改查

目錄 一、什么是 MyBatis&#xff1f;為什么要用它&#xff1f; 二、MyBatis 核心概念&#xff08;通俗理解&#xff09; 1.SqlSessionFactory 2.SqlSession 3.Mapper接口 4.映射文件&#xff08;XML&#xff09; 三、手把手搭建第一個 MyBatis 項目 1. 準備工作 2. 核心配置文…

數據結構初階(12)排序算法—插入排序(插入、希爾)(動圖演示)

2. 常見排序算法的實現2.0 十大排序算法2.1 插入排序 2.1.1 基本思想直接插入排序是一種簡單的插入排序法&#xff1a;基本思想把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中。直到所有的記錄插入完為止&#xff0c;得到一個新的有序序列 。 比 挪 (…

MySQL優化常用的幾個方法

本實例是對慢sql從2萬優化到5千優化方法的匯總。 首先貼上優化效果&#xff1a;1、更新數據時使用ID更新&#xff1b;2、"分頁/輪詢"查詢時先獲取符合數據要求主鍵的最大和最小ID&#xff0c;然后WHERE條件增加ID步增查詢&#xff1b;3、檢查SQL是否命中WHERE條件&am…

深入解析 AUTOSAR:汽車軟件開發的革命性架構

引言在汽車智能化、網聯化、電動化浪潮席卷全球的今天&#xff0c;汽車電子系統的復雜性與日俱增。傳統“煙囪式”的 ECU 開發模式&#xff08;各供應商獨立開發軟硬件&#xff09;帶來了巨大的兼容性、復用性和維護成本挑戰。AUTOSAR&#xff08;AUTomotive Open System ARchi…

計算機視覺(opencv)實戰一——圖像本質、數字矩陣、RGB + 圖片基本操作(灰度、裁剪、替換等)

OpenCV 入門教程&#xff1a; OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺庫&#xff0c;廣泛應用于圖像處理、視頻分析、機器學習等領域。 在 Python 中&#xff0c;cv2 是 OpenCV 的主要接口模塊。本文將帶你一步步掌握 cv2…

《探索C++ set與multiset容器:深入有序唯一性集合的實現與應用》

前引&#xff1a;在STL的關聯式容器中&#xff0c;set以其嚴格的元素唯一性和自動排序特性成為處理有序數據的核心工具。其底層基于紅黑樹&#xff08;Red-Black Tree&#xff09;實現&#xff0c;保證了O(log n)的查找、插入與刪除復雜度&#xff01;本文將從底層原理切入&…

各測試平臺功能對比分析(ITP,Postman,Apifox,MeterSphere)

對比ITP與Postman,Apifox,MeterSphere 功能特性ITPPostmanApifoxMeterSphere接口測試? 可視化接口調試&#xff0c;支持多種請求方式? 支持? 支持? 支持場景測試? 多接口串聯測試&#xff0c;支持前后置腳本? Collections功能? 支持? 支持定時任務? 基于Celery的定時…

開源日志log4cplus—如何將 string類型轉為tstring類型,又如何將char*類型轉換為tstring類型?

文章目錄&#x1f527; 一、理解 log4cplus::tstring 的本質?? 二、std::string 轉 tstring 的三種方法? 1. 使用內置宏 LOG4CPLUS_STRING_TO_TSTRING&#xff08;推薦&#xff09;? 2. 手動條件編譯轉換&#xff08;精細控制&#xff09;? 3. 多字節模式下的直接賦值??…

深度學習之CNN網絡簡介

CNN網絡簡單介紹 1.概述 卷積神經網絡&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一種專門用于處理具有網格狀結構數據的深度學習模型。 ? CNN網絡主要有三部分構成&#xff1a;卷積層、池化層和全連接層構成&#xff0c;其中卷積層負責提取圖像中…

【微實驗】基頻提取的MATLAB實現(優化版)

前情提要&#xff1a; 【超詳細】科普&#xff1a;別再只會用自相關&#xff01;YIN 和 PYIN 如何破解音頻隱藏密碼&#xff1f;-CSDN博客 【微實驗】媽媽我的MATLAB會識別聲音的基頻了&#xff01;-CSDN博客 今天用MATLAB把算法封裝成函數&#xff0c;然后調用對比結果。 …

開發 npm 包【詳細教程】(含發布 npm 包,版本號升級,修改包后重新發布等)

1. 給 npm 包取個【唯一】的名字&#xff01; npm 包命名規范 只能包含小寫字母&#xff08;a-z&#xff09;、數字&#xff08;0-9&#xff09;、連字符&#xff08;-&#xff09; 和 下劃線&#xff08;_&#xff09;&#xff0c;不能包含空格、大寫字母、標點符號&#xff…

Secure 第三天作業

實驗需求&#xff1a;1.參考以上拓撲所示&#xff0c;完成以下需求&#xff1a;1&#xff09; 配置各設備 IP 地址2&#xff09; 配置 ZBFW&#xff0c;Inside-1 和 nside-2 屬于內部 Zone&#xff0c;Outside-1 屬于外部 Zonezone security insidezone security outsidezone-p…

Linux應用層-5.計算機網絡(菜鳥學習筆記)

計算機網絡的核心是連接與通信&#xff0c;從底層的物理信號到上層的應用服務&#xff0c;各層協議協同工作---------------------------------------------------------------------------------------一.計算機網絡分類&#xff08;按范圍&#xff09;1?個人區域網&#xff…

[論文閱讀] 人工智能 + 軟件工程 | 大型語言模型對決傳統方法:多語言漏洞修復能力大比拼

大型語言模型對決傳統方法&#xff1a;多語言漏洞修復能力大比拼 論文閱讀&#xff1a;On the Evaluation of Large Language Models in Multilingual Vulnerability RepairarXiv:2508.03470 On the Evaluation of Large Language Models in Multilingual Vulnerability Repair…