初學Python爬蟲

文章目錄

  • 前言
    • 一、 爬蟲的初識
      • 1.1 什么是爬蟲
      • 1.2 爬蟲的核心
      • 1.3 爬蟲的用途
      • 1.4 爬蟲分類
      • 1.5 爬蟲帶來的風險
      • 1.6. 反爬手段
      • 1.7 爬蟲網絡請求
      • 1.8 爬蟲基本流程
    • 二、urllib庫初識
      • 2.1 http和https協議
      • 2.2 編碼解碼的使用
      • 2.3 urllib的基本使用
      • 2.4 一個類型六個方法
      • 2.5 下載網頁數據
      • 2.6 帶單個參數的頁面抓取(get請求)
      • 2.7 定制request使用ua反爬
      • 2.8 多字段的字符轉碼
      • 2.9 post請求的使用
      • 2.10 異常處理
    • 三、 requests請求的使用
      • 3.1 下載requests包
      • 3.2 requests的基本使用
      • 3.3 響應的保存
      • 3.4 響應對象的其他屬性
      • 3.5 用戶代理介紹
      • 3.6 構建ua池
      • 3.7 帶參數的請求
      • 3.8 通過面向對象的方式來獲取數據
      • 3.9 post請求
  • 總結


前言

在當今信息爆炸的時代,互聯網上的數據呈指數級增長,如何高效地獲取、處理和分析這些數據成為一項重要的技能。網絡爬蟲(Web Crawler)作為一種自動化數據采集工具,能夠幫助我們快速地從海量網頁中提取有價值的信息,廣泛應用于搜索引擎、數據分析、市場調研、輿情監控等領域。

學習爬蟲技術不僅能提升我們的編程能力,還能培養數據思維,為后續的數據挖掘、機器學習等方向奠定基礎。然而,爬蟲開發并非簡單的“請求-解析”過程,它涉及HTTP協議、HTML解析、反爬機制應對、數據存儲等多個技術點,同時還需遵守相關法律法規,合理合法地使用爬蟲技術。

本教程將從基礎概念入手,逐步介紹爬蟲的核心技術,并結合實際案例,幫助讀者掌握爬蟲開發的完整流程。無論你是編程初學者,還是希望提升數據采集能力的開發者,都可以通過本教程系統地學習爬蟲技術,并將其應用于實際項目中。


一、 爬蟲的初識

1.1 什么是爬蟲

在這里插入圖片描述

如果我們把互聯網比作一張大的蜘蛛網,那一臺計算機上的數據便是蜘蛛網上的一個獵物,而爬蟲程序就是一只小蜘蛛,沿著蜘蛛網抓取自己想要的數據

  • 解釋1: 通過一個程序,根據url(http://www.taobao.com)進行爬取網頁,獲取有用信息

  • 解釋2: 使用程序模擬瀏覽器,去向服務器發送請求,獲取響應信息

1.2 爬蟲的核心

  • 爬取網頁:爬取整個網頁 包含了網頁中所有得內容

  • 解析數據:將網頁中你得到的數據 進行解析

  • 難點:爬蟲和反爬蟲之間的博弈(數據獲取與數據保護之間的對抗)

1.3 爬蟲的用途

  • 數據分析/人工數據集

  • 社交軟件冷啟動(新平臺沒有足夠的人流,使用爬蟲爬去其他類似于(微博)等的用戶數據,來吸引用戶下載)

  • 輿情監控(一些災情信息等數據的獲取)

  • 競爭對手監控(不同購物平臺,爬取對方相同物品的價格,來適當降低價格,吸引用戶購買#)

在這里插入圖片描述

1.4 爬蟲分類

  • 通用爬蟲(不常用):抓取系統重要組成部分,抓取的是一整張頁面的數據。

  • 聚焦爬蟲:建立在通用爬蟲的基礎上,抓取的是頁面中特定的局部內容。

  • 增量式爬蟲:檢測網站中數據更新的情況,只抓取網站中最新更新的數據。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

1.5 爬蟲帶來的風險

  • 爬蟲干擾了被訪問網站的正常運營

  • 爬蟲抓取了受到法律保護的特定類型的數據或信息

1.6. 反爬手段

在這里插入圖片描述

1.7 爬蟲網絡請求

請求過程: 客戶端,指web瀏覽器向服務器發送請求

請求分為四部分:

  • 請求網址 --request url

  • 請求方法 --request methods

  • 請求頭 – request header

  • 請求體 – request body

可以通過F12查看請求響應

1.8 爬蟲基本流程

  • 確認目標:目標url:www.baidu.com
  • 發送請求: 發送網絡請求,獲取到特定的服務端給你的響應
  • 提取數據:從響應中提取特定的數據jsonpath/xpath/re
  • 保存數據:本地(html、json、txt)、數據庫

注意: 獲取到的響應中,有可能會提取到還需要繼續發送請求的ur1,可以拿著解析到的url繼續發送請求


二、urllib庫初識

2.1 http和https協議

概念和區別

http協議:超文本傳輸協議,默認端口號是80

  • 超文本:不僅僅限于文本,還包括圖片、音頻、視頻

  • 傳輸協議:指使用共用約定的固定格式來傳遞轉換成字符串的超文本內容

https協議: http+ ssl(安全套接字層)默認端口號是443

  • 帶有安全套接字層的超文本傳輸協議

  • ssl對傳輸的內容進行加密

https比http更安全,但是性能更低

2.2 編碼解碼的使用

圖片、視頻、音頻需要以bytes類型的格式來存儲

# 編碼--encode() 將str轉變為對應的二進制
str = '周杰倫'
print(str.encode())# 解碼--decode() 將二進制轉為str
str = b'\xe5\x91\xa8\xe6\x9d\xb0\xe4\xbc\xa6'
print(str.decode())

2.3 urllib的基本使用

# 前提:獲取數據的前提要聯網!!!!# 需求:使用urllib獲取百度首頁的源碼# 1. 導入urllib包(不用安裝)
import urllib.request# 1.定義一個url(就是需要訪問的地址)
url = 'http://www.baidu.com'# 2.模擬瀏覽器向服務器發送請求
# response包含頁面源碼和響應頭信息等等
response = urllib.request.urlopen(url)# 3.獲取響應中的頁面源碼(只要源碼)
# read方法返回的是帶b的二進制的數據
content = response.read()# 4.打印數據
# print(content) 二進制# 5.該編碼格式(解碼 decode方法)
# decode的默認解碼就是utf-8 因而也可以省略參數
print(content.decode('utf-8'))

2.4 一個類型六個方法

# 基礎操作
import urllib.requesturl = 'http://www.baidu.com'response = urllib.request.urlopen(url)# 一個類型和六個方法# 判斷類型
# <class 'http.client.HTTPResponse'>
# print(type(response))# read()方法是單字節的讀取數據(速度慢)
# content = response.read()
# 表示只讀5個字節
# content = response.read(5)
# print(content)# readline()方法 讀取一行(速度快)
# content = response.readline()
# print(content)# readlines()方法 讀取所有行
# content = response.readlines()
# print(content)# 返回狀態碼 200表示成功 證明邏輯是對的
print(response.getcode())# 返回url地址
print(response.geturl())# 返回狀態信息和響應頭
print(response.getheaders())

2.5 下載網頁數據

# 可以下載文件/音頻/視頻.....
# 適用于批量下載import urllib.requesturl_page = 'http://baidu.com'# 使用urlretrieve()方法
# 第一個參數是url地址,第二個參數是保存的文件名
# 返回的是html文件,所以后綴寫html
# urllib.request.urlretrieve(url_page, 'baidu.html')# 下載圖片
url_img = 'https://tse1-mm.cn.bing.net/th/id/OIP-C.hMxUTa_ah0EEEKjzMrcKZgHaJF?w=204&h=318&c=7&r=0&o=7&cb=iwp1&dpr=1.1&pid=1.7&rm=3.jpg'
urllib.request.urlretrieve(url_img, 'img.jpg')# 下載視頻(mp4)不再演示

2.6 帶單個參數的頁面抓取(get請求)

import urllib.request
import urllib.parse# url = "http://www.baidu.com/s?ie=UTF-8&wd=%E8%94%A1%E5%BE%90%E5%9D%A4"
# url = "http://www.baidu.com/s?ie=UTF-8&wd=蔡徐坤"
# 需要將中文進行編碼 導入quote即可
name = urllib.parse.quote("蔡徐坤")
# print(name)# 將%E8%94%A1%E5%BE%90%E5%9D%A4 轉化為 蔡徐坤
# 使用unquote即可
# rename = urllib.parse.unquote(name)
# print(rename)# 可以用戶自己輸入名字進行修改name
url = "http://www.baidu.com/s?ie=UTF-8&wd=" + name
response = urllib.request.urlopen(url)
content = response.read().decode()
print(content)

2.7 定制request使用ua反爬

再來了解一下ua反爬

user Agent中文名為用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引、瀏覽器語言、瀏覽器插件等。

通俗的講: ua能使得瀏覽器認為是請求不來自我們的爬蟲程序,而是來自瀏覽器本身

import urllib.request
import urllib.parsename = urllib.parse.quote("蔡徐坤")url = "https://www.baidu.com/s?ie=UTF-8&wd=" + name
# 定制request
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'
}
request = urllib.request.Request(url=url, headers=header)
response = urllib.request.urlopen(request)
content = response.read().decode()
print(content)

2.8 多字段的字符轉碼

# 當url為多個參數的時候進行轉碼
import urllib.parse
import urllib.request# http://www.baidu.com/s?wd=周杰倫&sex=男# 必須用字典才可以
data = {"wd": "周杰倫","sex": "男"
}a = urllib.parse.urlencode(data)
# print(a)
# 獲取網頁源碼
url = "https://www.baidu.com/s?" + a
# print(url)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'
}
request = urllib.request.Request(url=url, headers=header)
response = urllib.request.urlopen(request)
content = response.read().decode()
print(content)

2.9 post請求的使用

import json
import urllib.request
import urllib.parseurl = 'https://fanyi.baidu.com/sug'# 構建post請求的數據 字典形式
data = {'kw': 'translate'
}
# post請求必須添加編碼 轉變為二進制的數據
data = urllib.parse.urlencode(data).encode('utf-8')
# print(data)
request = urllib.request.Request(url = url, data = data)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)
# 獲取的數據是json格式 字符串被編碼了,轉化為字典字符串正常顯示
obj = json.loads(content)
print(obj,type(obj))

2.10 異常處理

import urllib.request
url = 'http://www.baidu.com1'
try:response = urllib.request.urlopen(url)print(response.read().decode('utf-8'))
except urllib.error.URLError:print("發送錯誤")

三、 requests請求的使用

上面單純使用urllib的方式,顯然麻煩了不少,并且不易于理解,那么有沒有更簡單更容易上手的方法呢,有的兄弟有的,可以直接使用requests的方式。

3.1 下載requests包

方式一:使用命令行安裝

  1. 打開命令行cmd(win + R)
  2. 輸入pip -V 查看pip是否正常安裝(python正常安裝的情況下,pip自動安裝)
  3. 輸入 pip install requests(默認國外地址,安裝較慢,這里使用國內地址)
 pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 等待安裝成功提示即可

方式二:使用pycharm直接安裝

在右下腳找到python軟件包,搜索requests下載安裝即可(也可以使用國內地址進行安裝)

Tip: 可以使用pip uninstall 包名 來卸載指定的包。

3.2 requests的基本使用

# 爬取百度頁面的源碼# 1. 導包
import requests# 2. 發送請求
# 進入百度查看是否是get請求
url = 'http://www.baidu.com'
response = requests.get(url)
# print(response) #<Response [200]>可以直接獲取響應碼# 獲取相應
# text屬性會自動尋早一個解碼方式去解碼會出現報錯
# 解決方式為 講response直接加入encoding即可
# response.encoding = 'utf-8'
# print(response.text)# 方式二 使用content方法 加上解碼即可
print(response.content.decode())

3.3 響應的保存

  1. 圖片的保存
# 用resquests來保存一張圖片import requests
url = 'https://ww4.sinaimg.cn/mw690/0078WY2egy1i139fqp2wqj31jk2bcn61'
# 先判斷get請求
res = requests.get(url)
# b形式數據圖片存儲
# print(res.content)
# 通過文件的形式保存 一定要帶上b模式啊
with open('img.jpg', 'wb') as f:f.write(res.content)
  1. 百度頁面的保存
import requests
url = 'http://www.baidu.com'
res = requests.get(url)
with open("baidu.html", "w",encoding="utf-8") as f:f.write(res.content.decode())

3.4 響應對象的其他屬性

import requests
url = 'http://www.baidu.com'
res = requests.get(url)
#打印響應的ur1
print(res.url)#打印響應對象的請求頭
print(res.request.headers)# 打印響應頭
print(res.headers)

3.5 用戶代理介紹

import requests
url1 = 'http://www.baidu.com'  #509723
url2 = 'https://www.baidu.com' #227# res = requests.get(url2)
# content = res.content.decode()
# print(len(content))#  使用用戶代理反爬蟲
# 依舊是寫成字典形式
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}# 添加ua 讓服務器認為是瀏覽器在發送請求response = requests.get(url2,headers=headers)
content = response.content.decode()
print(len(content)) # 28918

3.6 構建ua池

import random
# 構建ua池,防止多次調用被反爬# 方法1 自己寫ua池
uAlist = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36','Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1','Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Mobile Safari/537.36'
]
# 隨機獲取一個ua
# print(random.choice(uAlist))# 方法2 外包生成ua
# 下載fake-useragent包
# 頻繁調用的時候可能會報錯
from fake_useragent import UserAgent
print(UserAgent().random)

3.7 帶參數的請求

# 帶參數數據的請求爬取
import requestsurl = 'https://www.baidu.com/s?ie=UTF-8'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
}
data = {'wd': '蔡徐坤'
}res = requests.get(url,headers=headers,params=data)
content = res.content.decode()
print(content)

3.8 通過面向對象的方式來獲取數據

# 獲取明星頁面信息并且保存
import  requests
class Star:def __init__(self):self.url = 'https://www.baidu.com/s?ie=UTF-8'self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36'}# 發送數據def send(self,params):response = requests.get(self.url,headers=self.headers,params=params)return response.text# 保存數據def save(self,content):with open('star.html','w',encoding='utf-8') as f:f.write(content)def run(self):name = input('請輸入明星名稱:')params = {'wd':name}content = self.send(params)self.save(content)star = Star()
star.run()

3.9 post請求

post請求: 登錄注冊,傳輸大文本內容# requests.post(url,data)# data參數接收一個字典

get跟post區別

  • get請求—比較多

  • post請求 – 比較少

  • get請求直接向服務器發送請求,獲取應內容

  • post請求是先給服務器一些數據,然后再獲取響應

  • get請求攜帶參數-- params

  • post詩求攜帶參數- data

# 百度翻譯案例
import jsonimport requestsurl = "https://fanyi.baidu.com/sug"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
data = {"kw": "eye"
}
response = requests.post(url,headers=headers,data=data)
content = response.text
# print(content)
obj = json.loads(content)
print(obj)

總結

通過本教程的學習,我們系統地掌握了網絡爬蟲的基本原理和關鍵技術。從HTTP請求、HTML解析,到動態頁面渲染、反爬策略應對,再到數據的清洗與存儲,我們一步步構建了一個完整的爬蟲知識體系。

爬蟲技術不僅僅是一種數據采集手段,更是連接互聯網世界與數據分析的橋梁。掌握爬蟲技能后,我們可以高效地獲取所需數據,為商業分析、學術研究、自動化運維等場景提供強大的數據支持。

然而,爬蟲開發并非沒有邊界。在實踐過程中,我們必須遵守目標網站的robots.txt協議,尊重版權和隱私,避免對服務器造成過大壓力。同時,隨著反爬技術的不斷升級,爬蟲開發者也需要持續學習,靈活應對各種挑戰。

未來,隨著人工智能和大數據的發展,爬蟲技術將繼續演進,與自然語言處理(NLP)、機器學習(ML)等技術結合,創造更大的價值。希望讀者能夠在本教程的基礎上,進一步探索爬蟲的高級應用,如分布式爬蟲、智能解析等,不斷提升自己的技術能力。

數據驅動未來,爬蟲賦能探索! 🚀

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

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

相關文章

oracle 數據庫sql 語句處理過程

14.1SQL語句處理過程 在進行SQL語句處理優化前&#xff0c;需要先熟悉和了解SQL語句的處理過程。 每種類型的語句在執行時都需要如下階段&#xff1a; 第1步: 創建游標。 第2步: 分析語句。 第5步: 綁定變量。 第7步: t運行語句。 第9步: 關閉游標。 如果使用了并行功能&#x…

pm2 list查詢服務時如何通過name或者namespace進行區分

在 PM2 中&#xff0c;如果 pm2 list 顯示的所有服務名稱&#xff08;name&#xff09;相同&#xff0c;就無法直觀地區分不同的進程。這時可以通過 --namespace&#xff08;命名空間&#xff09; 或 自定義 name 來區分服務。以下是解決方案&#xff1a; 方法 1&#xff1a;啟…

[python] 函數基礎

二 函數參數 2.1 必備參數(位置參數) 含義: 傳遞和定義參數的順序及個數必須一致 格式: def func(a,b) def func_1(id,passwd):print("id ",id)print("passwd ",passwd) func_1(10086,123456) 2.2 默認參數 函數: 為函數的參數提供一個默認值,如果調…

超大規模SoC后仿真流程與優化

在超大規模SoC設計中,是否需要進行全芯片后仿真(Full-Chip Post-layout Simulation)取決于多個因素,包括設計復雜度、項目風險、資源限制以及驗證目標。以下是針對這一問題的系統性分析: 1. 全芯片后仿真的必要性 需要全芯片后仿真的場景 系統級交互驗證: 跨模塊信號交互…

深入理解 Docker 網絡原理:構建高效、靈活的容器網絡

在現代軟件開發中&#xff0c;Docker 已經成為了容器化技術的代名詞&#xff0c;廣泛應用于開發、測試和生產環境。Docker 使得開發者能夠將應用及其依賴打包成一個輕量級的容器&#xff0c;并通過 Docker 容器化技術來實現高效的部署與管理。 然而&#xff0c;在日常使用 Dock…

leetcode 242. Valid Anagram

題目描述 因為s和t僅僅包含小寫字母&#xff0c;所以可以開一個26個元素的數組用來做哈希表。不過如果是unicode字符&#xff0c;那就用編程語言自帶的哈希表。 class Solution { public:bool isAnagram(string s, string t) {int n s.size();if(s.size() ! t.size())return …

4、反應釜壓力監控系統 - /自動化與控制組件/reaction-vessel-monitor

76個工業組件庫示例匯總 反應釜壓力監控組件 這是一個用于反應釜壓力監控的自定義組件&#xff0c;專為化工廠反應釜壓力監控設計。采用蘋果工業風格界面&#xff0c;簡潔優雅&#xff0c;功能實用&#xff0c;易于使用。 功能特點 實時壓力可視化&#xff1a;直觀展示反應…

系統思考助力富維東陽

剛剛完成了長春一家汽車零配件公司關于系統思考的項目&#xff01; 在開班儀式上&#xff0c;公司總經理深刻闡述了項目的背后意義&#xff0c;強調了系統思考與公司戰略的緊密聯系。這不僅是一次培訓&#xff0c;更是一次關于“如何全方位看待問題”的深度對話。 在這個過程中…

Linux下的c/c++開發之操作Sqlite3數據庫

libsqlite3-dev 介紹&#xff08;Linux 下的 SQLite3 C/C 開發包&#xff09; libsqlite3-dev 是一個開發包&#xff0c;在 Linux 環境下為使用 SQLite3 C API 進行開發的 C/C 程序員提供頭文件&#xff08;如 sqlite3.h&#xff09;和靜態庫/動態庫的鏈接信息&#xff08;如 …

【Prompt工程—文生圖】案例大全

目錄 一、人物繪圖 二、卡通頭像 三、風景圖 四、logo設計圖 五、動物形象圖 六、室內設計圖 七、動漫風格 八、二次元圖 九、日常場景圖 十、古風神化圖 十一、游戲場景圖 十二、電影大片質感 本文主要介紹了12種不同類型的文生圖技巧&#xff0c;通過加入不同的圖像…

GMRES算法處理多個右端項的Block與PseudoBlock變體

GMRES算法處理多個右端項的Block與PseudoBlock變體 Block與PseudoBlock GMRES簡介 在處理多個右端項的線性方程組時&#xff0c;Block GMRES和PseudoBlock GMRES是兩種常用的變體算法&#xff1a; Block GMRES&#xff1a;同時處理所有右端項&#xff0c;構建一個大的Krylov…

Ubuntu環境下如何管理系統中的用戶:創建用戶、刪除用戶、修改密碼、切換用戶、用戶組管理

管理用戶的操作需要root權限&#xff0c;在執行命令時需要加sudo&#xff0c;關于sudo命令可以看這篇&#xff1a;Linux_sudo命令的使用與機制 1、添加用戶 使用命令&#xff1a; adduser 用戶名&#xff0c;主要是按提示輸入密碼和用戶信息&#xff08;可直接回車使用默認配置…

開源BI選型及DataEase搭建

工具名稱 國家/社區技術棧核心功能國內適用性國外適用性推薦場景Apache Superset美國&#xff08;Apache&#xff09;Python/React可視化、SQL Lab、多數據源、插件擴展需自行漢化&#xff0c;社區支持較少生態完善&#xff0c;云原生支持好&#xff08;AWS/GCP&#xff09;中大…

云計算-容器云-部署jumpserver 版本1

部署jumpserver [root@jumpserver ~]# tar -zxvf jumpserver.tar.gz -C /opt/ [root@jumpserver ~]# ls /opt/ compose config docker docker.service images jumpserver-repo static.env將默認Yum源移至其他目錄,創建本地Yum源文件,命令及文件內容如下: [root@jumpserver…

利用Elixir中的原子特性 + 錯誤消息泄露 -- Atom Bomb

題目信息: This new atom bomb early warning system is quite strange… 題目使用 elixir 語言 一開始,我們會訪問 /page.html <!DOCTYPE html> <!-- 設定文檔語言為英語 --> <html lang"en"> <head><!-- 設定字符編碼為UTF-8 --><…

Spring MVC設計與實現

DispatcherServlet的初始化與請求處理流程 初始化階段 Servlet 生命周期觸發&#xff1a;當 Web 容器&#xff08;如 Tomcat&#xff09;啟動時&#xff0c;根據注解/配置&#xff0c;DispatcherServlet 的 init() 方法被調用。 初始化 WebApplicationContext 根 WebApplicat…

64.微服務保姆教程 (七) RocketMQ--分布式消息中間件

RocketMQ–分布式消息中間件 一、MQ 1、什么是MQ MQ(Message Queue)消息隊列,是基礎數據結構中“先進先出”的一種數據結構。指把要傳輸的數據(消息)放在隊列中,用隊列機制來實現消息傳遞——生產者產生消息并把消息放入隊列,然后由消費者去處理。消費者可以到指定隊…

java算法的核心思想及考察的解題思路

一、Java算法的核心思想 1. 分而治之 (Divide and Conquer) 將大問題分解為小問題&#xff0c;遞歸解決小問題后合并結果 典型應用&#xff1a;歸并排序、快速排序、二分查找 2. 動態規劃 (Dynamic Programming) 將問題分解為重疊子問題&#xff0c;存儲子問題的解避免重復…

linux查java進程CPU高的原因

問題&#xff1a;linux查java進程CPU高的原因 解決&#xff1a;用jdk帶的工具分析 被查的java最好也使用jdk啟動 systemctl啟動的注意要去掉PrivateTmptrue /opt/jdk1.8.0_441/bin/jps -l top -Hp 8156 printf "%x" 8533 /opt/jdk1.8.0_441/bin/jstack 8156 |…

體育培訓的實驗室管理痛點 質檢LIMS如何重構體育檢測價值鏈

在競技體育與全民健身并行的時代背景下&#xff0c;體育培訓機構正面臨雙重挑戰&#xff1a;既要通過科學訓練提升學員競技水平&#xff0c;又需嚴格把控運動安全風險。作為實驗室數字化管理的核心工具&#xff0c;質檢LIMS系統憑借其標準化流程管控與智能化數據分析能力&#…