Python爬蟲:開啟數據抓取的奇幻之旅(一)

目錄

一、爬蟲初印象:揭開神秘面紗?

二、工欲善其事:前期準備?

(一)Python 環境搭建?

1.下載 Python 安裝包:?

2.運行安裝程序:?

3.配置環境變量(若自動添加失敗):?

(二)開發工具推薦?

1.PyCharm:?

2.Jupyter Notebook:?

(三)必備庫安裝?

1.requests 庫:?

2.BeautifulSoup4 庫:?

3.Scrapy 框架:?

4.Selenium 庫:?

三、爬蟲原理剖析:探尋內在機制?

(一)發起請求?

(二)獲取響應?

(三)解析內容?

(四)保存數據?


?

一、爬蟲初印象:揭開神秘面紗?

在互聯網這個廣袤無垠的信息宇宙中,數據如同繁星般璀璨繁多。而 Python 網絡爬蟲,就像是一位神秘而強大的 “數據探險家”,能夠按照既定規則,自動穿梭于網絡世界,抓取我們所需的數據。?

從定義上來說,網絡爬蟲是一種自動化程序,它模仿人類在瀏覽器中的操作行為,向網頁服務器發送請求,獲取網頁內容,并對這些內容進行解析和提取,從而獲取有價值的數據。你可以把它想象成一個勤勞的小蜜蜂,在萬維網這個大花園里,不知疲倦地采集著 “數據花蜜”。?

Python 作為當下最熱門的編程語言之一,在爬蟲領域有著無可比擬的優勢。首先,Python 的語法簡潔明了,就像一本通俗易懂的故事書,即使是編程小白也能輕松上手。相比其他編程語言,Python 代碼量更少,結構更加清晰,這使得開發者能夠更快速地編寫和調試爬蟲程序,大大提高了開發效率。例如,在 Python 中,使用requests庫發送一個 HTTP 請求只需要短短一行代碼:response = requests.get(url),簡潔高效,一目了然。?

其次,Python 擁有豐富的爬蟲庫和框架,這些強大的工具就像是給爬蟲配備了各種神奇的裝備,讓它在數據抓取的道路上如虎添翼。比如BeautifulSoup庫,它可以輕松地解析 HTML 和 XML 文檔,提取出我們需要的數據,就像一把精準的手術刀,能夠在復雜的網頁結構中準確地 “切割” 出所需信息;Scrapy框架則提供了更高級的功能,如分布式爬取、自動處理請求隊列、中間件機制等,使得我們可以構建大規模、高性能的爬蟲系統。?

此外,Python 還具備強大的數據處理和分析能力,這對于爬蟲獲取到的數據后續處理非常關鍵。借助Pandas和NumPy等庫,我們可以對爬取到的數據進行清洗、篩選、聚合和可視化等操作,將原始數據轉化為有價值的信息,為數據分析和決策提供有力支持。而且,Python 擁有龐大的開發者社區和豐富的資源,當我們在開發爬蟲過程中遇到問題時,可以很容易地在社區中尋求幫助,借鑒其他開發者的經驗和解決方案。?

二、工欲善其事:前期準備?

(一)Python 環境搭建?

在正式開啟 Python 網絡爬蟲之旅前,我們首先得搭建好 Python 運行環境,這就好比為爬蟲打造一個堅固的 “戰車”。?

1.下載 Python 安裝包:?

打開瀏覽器,訪問 Python 官方網站(https://www.python.org/downloads/ )。在下載頁面,你會看到不同版本的 Python 可供選擇。強烈推薦下載最新的穩定版本,因為新版本通常會修復一些舊版本的漏洞,并且增加了新的功能。如果你不確定選擇哪個版本,一般來說,選擇帶有 “Python 3.x” 字樣的版本即可,目前 Python 3.10 及以上版本都是不錯的選擇 。根據你的操作系統(Windows、Mac OS 或 Linux),點擊相應的下載鏈接。例如,在 Windows 系統下,你可以選擇 “Windows installer (64-bit)” 下載 64 位的安裝包,如果你的電腦是 32 位系統,則選擇 “Windows installer (32-bit)” 。?

2.運行安裝程序:?

下載完成后,找到下載的安裝包,通常是一個以.exe結尾的文件,雙擊運行它。在安裝向導界面,你會看到一些選項,務必勾選 “Add Python 3.x to PATH” 選項,這一步至關重要,它會自動將 Python 添加到系統的環境變量中,這樣我們就可以在命令行中直接使用 Python 命令了。然后點擊 “Install Now” 進行默認安裝,如果你想自定義安裝路徑,也可以選擇 “Customize installation” 來自行指定安裝位置。安裝過程可能需要一些時間,請耐心等待。?

3.配置環境變量(若自動添加失敗):?

雖然在安裝時勾選 “Add Python 3.x to PATH” 選項會自動配置環境變量,但有時可能會出現意外情況導致配置失敗。這時,我們就需要手動配置環境變量。?

在 Windows 系統中,右鍵點擊 “此電腦”,選擇 “屬性”,然后點擊 “高級系統設置”,在彈出的窗口中點擊 “環境變量” 按鈕。在 “系統變量” 中找到 “Path” 變量,點擊 “編輯”,在彈出的編輯環境變量窗口中,點擊 “新建”,將 Python 的安裝路徑添加進去。例如,如果你的 Python 安裝在 “C:\Python310”,就將 “C:\Python310” 和 “C:\Python310\Scripts” 添加到 Path 變量中(注意:如果你的安裝路徑不同,請根據實際情況修改)。添加完成后,一路點擊 “確定” 保存設置。?

在 Mac OS 系統中,打開 “終端” 應用,編輯.bash_profile文件(如果沒有該文件,可以創建一個)。在終端中輸入nano ~/.bash_profile,然后在文件中添加export PATH="/Library/Frameworks/Python.framework/Versions/3.10/bin:$PATH"(同樣,這里的路徑要根據你實際安裝的 Python 版本和路徑進行修改),保存并退出文件(按Ctrl+X,然后按Y,最后按Enter)。最后,在終端中輸入source ~/.bash_profile使配置生效。?

完成以上步驟后,打開命令行(Windows 下按Win+R,輸入cmd并回車;Mac OS 下打開 “終端”),輸入python --version,如果顯示出你安裝的 Python 版本號,恭喜你,Python 環境搭建成功!?

(二)開發工具推薦?

擁有了 Python 環境,還需要一款稱手的開發工具,就像戰士需要一把鋒利的寶劍一樣。以下兩款工具在 Python 爬蟲開發中備受青睞:?

1.PyCharm:?

PyCharm 是由 JetBrains 公司開發的一款專門針對 Python 的集成開發環境(IDE),功能強大到超乎想象,堪稱 Python 開發者的 “瑞士軍刀”。它擁有智能代碼補全功能,當你輸入代碼時,它能自動提示可能的函數、變量和方法,大大提高了編碼效率,就像有一個貼心的小助手在旁邊隨時提醒你一樣。比如,當你輸入requests.ge,它會自動提示requests.get方法,你只需按下回車鍵就能快速完成輸入。?

它還具備強大的代碼分析和調試工具。在調試爬蟲程序時,你可以設置斷點,逐行執行代碼,觀察變量的值和程序的執行流程,輕松找出代碼中的問題。而且,PyCharm 支持多種 Python 框架和庫,對于爬蟲開發中常用的requests、BeautifulSoup等庫都有很好的支持,讓你可以無縫集成各種工具進行開發。此外,它還提供了豐富的插件市場,你可以根據自己的需求安裝各種插件,進一步擴展其功能。?

PyCharm 適用于各種規模的項目開發,無論是小型的個人爬蟲項目,還是大型的企業級數據采集系統,它都能游刃有余地應對。對于初學者來說,它友好的界面和詳細的提示信息也能幫助快速上手。?

2.Jupyter Notebook:?

Jupyter Notebook 是一個開源的交互式計算環境,它以一種獨特的方式展示代碼和結果,就像是一個可以實時交互的筆記本。在 Jupyter Notebook 中,你可以將代碼、文本、圖像、數學公式等多種元素組合在一個文檔中,并且可以逐行運行代碼,立即看到結果,這種交互式的體驗非常適合快速驗證想法、進行數據分析和可視化,以及教學演示。?

例如,在進行爬蟲開發時,你可以先在 Jupyter Notebook 中編寫一小段代碼來測試網頁請求是否成功,然后逐步添加代碼進行數據解析和提取,每一步的結果都能直觀地展示出來,方便你隨時調整和優化代碼。它還支持多種編程語言,不過我們主要使用它來進行 Python 編程。?

Jupyter Notebook 特別適合數據科學和機器學習領域的項目,以及需要頻繁進行代碼測試和探索性開發的場景。它的分享和協作功能也非常強大,你可以將整個 Notebook 文件分享給他人,他人可以直接在自己的環境中打開并運行,方便團隊之間的交流和合作。?

(三)必備庫安裝?

Python 的強大離不開各種豐富的庫,對于網絡爬蟲來說,以下幾個庫是必不可少的 “秘密武器”:?

1.requests 庫:?

requests 庫是 Python 中最常用的 HTTP 請求庫,它的使命就是讓 HTTP 請求變得簡單而優雅。使用它,你可以輕松地發送各種類型的 HTTP 請求,如 GET、POST、PUT、DELETE 等,就像給網頁服務器發送一封簡單的信件一樣容易。例如,使用requests.get(url)就可以向指定的url發送一個 GET 請求,獲取網頁的內容,代碼如下:

import requestsurl = 'https://www.example.com'
response = requests.get(url)
if response.status_code == 200:print(response.text)
else:print(f"請求失敗,狀態碼:{response.status_code}")

安裝 requests 庫非常簡單,打開命令行,輸入pip install requests即可完成安裝。如果你的網絡連接較慢,可能需要設置一下超時時間,比如pip --default-timeout=100 install requests 。?

2.BeautifulSoup4 庫:?

BeautifulSoup4(簡稱bs4)是一個用于解析 HTML 和 XML 文檔的庫,它就像一把神奇的手術刀,能夠將復雜的網頁結構解析成一個易于操作的樹形結構,讓你可以輕松地提取出所需的數據。比如,你可以使用它來查找網頁中的所有鏈接、提取特定標簽的內容等。?

以下是一個簡單的示例,使用BeautifulSoup4解析 HTML 文檔并提取所有鏈接:

from bs4 import BeautifulSouphtml = """
<html>
<head><title>示例網頁</title>
</head>
<body><a href="https://www.example1.com">鏈接1</a><a href="https://www.example2.com">鏈接2</a>
</body>
</html>
"""soup = BeautifulSoup(html, 'html.parser')
links = soup.find_all('a')
for link in links:print(link.get('href'))

安裝BeautifulSoup4庫同樣使用 pip 命令:pip install beautifulsoup4 。此外,還需要安裝一個解析器,常用的解析器有lxml和html.parser,可以通過pip install lxml或pip install html.parser來安裝。?

3.Scrapy 框架:?

Scrapy 是一個功能強大的爬蟲框架,它為我們提供了一套完整的爬蟲解決方案,就像一個裝備精良的戰斗團隊,能夠幫助我們高效地構建大型、復雜的爬蟲系統。Scrapy 具有分布式爬取的能力,可以利用多臺計算機同時進行數據采集,大大提高了爬取效率;它還自帶了自動處理請求隊列、中間件機制等功能,使得爬蟲的管理和擴展更加方便。?

使用 Scrapy 框架,你需要定義爬蟲類,指定要爬取的網站、解析規則等。以下是一個簡單的 Scrapy 爬蟲示例:

import scrapyclass ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['https://www.example.com',]def parse(self, response):for item in response.css('div.item'):yield {'title': item.css('h2.title::text').get(),'link': item.css('a::attr(href)').get(),}

安裝 Scrapy 框架:pip install scrapy 。?

4.Selenium 庫:?

Selenium 庫主要用于自動化測試,但在爬蟲領域也有著重要的應用。它可以模擬人類在瀏覽器中的操作,如點擊按鈕、輸入文本、滾動頁面等,這對于一些需要交互才能獲取數據的網站非常有用。比如,有些網站的數據是通過 JavaScript 動態加載的,使用普通的爬蟲庫無法直接獲取,這時就可以借助 Selenium 庫來驅動瀏覽器,模擬用戶操作,從而獲取到完整的數據。?

使用 Selenium 庫需要先安裝瀏覽器驅動,例如 Chrome 瀏覽器需要下載 ChromeDriver。以下是一個使用 Selenium 打開網頁并獲取標題的示例:

from selenium import webdriverdriver = webdriver.Chrome()
driver.get('https://www.example.com')
print(driver.title)
driver.quit()

安裝 Selenium 庫:pip install selenium 。?

三、爬蟲原理剖析:探尋內在機制?

(一)發起請求?

當我們使用爬蟲獲取網頁數據時,首先要做的就是發起請求,這就好比我們去朋友家拜訪,需要先敲敲門詢問是否可以進入。爬蟲通過 HTTP 協議向目標網站的服務器發送請求,請求中包含了很多信息,如請求的網址(URL)、請求方法(GET、POST 等)、請求頭(Headers)等 。?

其中,URL 就像是朋友家的地址,明確告訴爬蟲要訪問哪個網頁;請求方法則決定了我們以何種方式與服務器 “交流”,GET 方法通常用于獲取網頁的基本信息,就像我們簡單地詢問朋友家里的情況;POST 方法則更像是帶著禮物去朋友家,它可以向服務器發送一些數據,比如登錄表單中的用戶名和密碼等。請求頭則包含了更多關于請求的細節信息,例如我們使用的瀏覽器類型、操作系統等,這些信息就像是我們去朋友家時的自我介紹,讓服務器能夠更好地 “了解” 我們的請求。?

以使用requests庫發送 GET 請求為例,代碼如下:

import requestsurl = 'https://www.example.com'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
response = requests.get(url, headers=headers)

在這段代碼中,我們定義了要訪問的url,并設置了headers,模擬了一個 Chrome 瀏覽器的請求頭,然后使用requests.get()方法發送請求,服務器會根據這個請求返回相應的內容。?

(二)獲取響應?

當爬蟲發送請求后,服務器會對這個請求進行處理,并返回一個響應(Response)。這個響應就像是朋友從房間里遞給我們的東西,里面包含了我們請求的網頁內容。響應內容可能是 HTML 格式的文本,這就像是一份詳細的房屋布局圖,描述了網頁的結構和展示內容;也可能是 JSON 格式的數據,更像是一份簡潔的物品清單,以一種結構化的方式存儲著數據;還可能是二進制數據,比如圖片、視頻等,就像朋友給我們的一些實體物品。?

在 Python 中,使用requests庫發送請求后,我們可以通過response對象來獲取響應的各種信息。例如,通過response.status_code可以獲取響應的狀態碼,200 表示請求成功,就像朋友愉快地開門迎接我們;404 表示頁面未找到,意味著我們找錯了地址;500 表示服務器內部錯誤,就像是朋友家里出了點狀況。通過response.text可以獲取響應的文本內容(如果是 HTML 頁面,就是頁面的源代碼),通過response.json()可以將 JSON 格式的響應內容解析為 Python 的字典或列表對象。?

以下是獲取響應內容并判斷狀態碼的示例代碼:

import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:print("請求成功,網頁內容如下:")print(response.text)
else:print(f"請求失敗,狀態碼:{response.status_code}")

(三)解析內容?

獲取到響應內容后,我們需要從中提取出我們真正需要的數據,這就好比從朋友給的東西里挑選出我們感興趣的物品。解析網頁內容有多種方法,常用的有正則表達式、BeautifulSoup、XPath 等。?

1.正則表達式:正則表達式是一種強大的文本匹配工具,它使用特定的字符和規則來描述文本模式。在解析網頁時,我們可以用正則表達式來匹配 HTML 文本中的特定內容。例如,要提取網頁中所有的鏈接,可以使用類似r'href=["\'](.*?)["\']'的正則表達式。不過,正則表達式的語法相對復雜,對于復雜的網頁結構,編寫和調試正則表達式可能會比較困難,就像是在一堆雜亂的物品中尋找特定的東西,需要花費一些心思。?

以下是使用正則表達式提取網頁鏈接的示例代碼:

import re
import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:pattern = re.compile(r'href=["\'](.*?)["\']')links = pattern.findall(response.text)for link in links:print(link)
else:print(f"請求失敗,狀態碼:{response.status_code}")

2.BeautifulSoup:BeautifulSoup 是一個專門用于解析 HTML 和 XML 文檔的庫,它將復雜的文檔結構轉化為一個易于操作的樹形結構,就像把一堆雜亂的物品整理成一個有序的貨架,我們可以方便地從中找到所需的東西。使用 BeautifulSoup,我們可以通過標簽名、屬性等方式輕松地查找和提取數據。比如,使用soup.find_all('a')可以找到網頁中所有的<a>標簽,即鏈接標簽;使用soup.find('div', class_='content')可以找到 class 為content的<div>標簽,提取其中的內容。?

以下是使用 BeautifulSoup 提取網頁鏈接的示例代碼:

from bs4 import BeautifulSoup
import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')links = soup.find_all('a')for link in links:print(link.get('href'))
else:print(f"請求失敗,狀態碼:{response.status_code}")

3.XPath:XPath 是一種用于在 XML 和 HTML 文檔中定位節點的語言,它通過路徑表達式來選取文檔中的元素,就像在一個地圖上通過坐標來找到特定的地點。例如,//a表示選取所有的<a>標簽,//div[@class='content']表示選取 class 為content的<div>標簽。XPath 在處理復雜的網頁結構時非常強大,能夠準確地定位到我們需要的數據節點 。?

以下是使用 XPath 提取網頁鏈接的示例代碼:

from lxml import etree
import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:html = etree.HTML(response.text)links = html.xpath('//a/@href')for link in links:print(link)
else:print(f"請求失敗,狀態碼:{response.status_code}")

(四)保存數據?

解析出所需的數據后,我們需要將這些數據保存起來,以便后續使用,這就像是把挑選好的物品妥善存放起來。數據可以保存為多種格式,常見的有文本文件、CSV 文件、數據庫等。?

1.保存為文本文件:將數據保存為文本文件是最基本的方式,適合保存一些簡單的數據,比如提取的網頁標題、文本內容等。使用 Python 的內置函數open()可以創建一個文本文件,并使用write()方法將數據寫入文件。?

以下是將提取的網頁標題保存為文本文件的示例代碼:

from bs4 import BeautifulSoup
import requestsurl = 'https://www.example.com'
response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')title = soup.title.stringwith open('title.txt', 'w', encoding='utf-8') as f:f.write(title)
else:print(f"請求失敗,狀態碼:{response.status_code}")

2.保存為 CSV 文件:CSV(Comma-Separated Values)文件是一種常用的表格數據格式,適合保存結構化的數據,比如從網頁中提取的商品列表、新聞列表等。使用 Python 的csv庫可以方便地將數據保存為 CSV 文件。?

以下是將提取的商品信息保存為 CSV 文件的示例代碼:

import csv
from bs4 import BeautifulSoup
import requestsurl = 'https://www.example.com/products'
response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')products = []for product in soup.find_all('div', class_='product'):name = product.find('h2', class_='product-name').text.strip()price = product.find('span', class_='product-price').text.strip()products.append([name, price])with open('products.csv', 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerow(['商品名稱', '價格'])writer.writerows(products)
else:print(f"請求失敗,狀態碼:{response.status_code}")

3.保存到數據庫:如果數據量較大或者需要進行復雜的數據查詢和管理,將數據保存到數據庫是更好的選擇。常見的數據庫有 MySQL、MongoDB 等。以 MySQL 為例,使用pymysql庫可以連接 MySQL 數據庫,并將數據插入到數據庫表中。?

以下是將提取的用戶評論保存到 MySQL 數據庫的示例代碼:

import pymysql
from bs4 import BeautifulSoup
import requestsurl = 'https://www.example.com/comments'
response = requests.get(url)if response.status_code == 200:soup = BeautifulSoup(response.text, 'html.parser')comments = []for comment in soup.find_all('div', class_='comment'):author = comment.find('span', class_='comment-author').text.strip()content = comment.find('p', class_='comment-content').text.strip()comments.append((author, content))conn = pymysql.connect(host='localhost', user='root', password='password', database='test')cursor = conn.cursor()for comment in comments:sql = "INSERT INTO comments (author, content) VALUES (%s, %s)"cursor.execute(sql, comment)conn.commit()cursor.close()conn.close()
else:print(f"請求失敗,狀態碼:{response.status_code}")

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

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

相關文章

機器學習——集成學習框架(GBDT、XGBoost、LightGBM、CatBoost)、調參方法

一、集成學習框架 對訓練樣本較少的結構化數據領域&#xff0c;Boosting算法仍然是常用項 XGBoost、CatBoost和LightGBM都是以決策樹為基礎的集成學習框架 三個學習框架的發展是&#xff1a;XGBoost是在GBDT的基礎上優化而來&#xff0c;CatBoost和LightGBM是在XGBoost的基礎上…

第十五章:Python的Pandas庫詳解及常見用法

在數據分析領域&#xff0c;Python的Pandas庫是一個不可或缺的工具。它提供了高效的數據結構和數據分析工具&#xff0c;使得數據處理變得簡單而直觀。本文將詳細介紹Pandas庫的基本功能、常見用法&#xff0c;并通過示例代碼演示如何使用Pandas進行數據處理。最后&#xff0c;…

【Python桌面應用】PySide6 界面開發完全指南

文章目錄 1. 引言2. PySide6 簡介與安裝2.1 什么是PySide62.2 PySide6 vs. PyQt62.3 安裝PySide62.4 開發環境配置建議 3. Qt 設計原理3.1 Qt對象模型3.2 信號與槽機制3.3 Qt坐標系統3.4 Qt樣式表(QSS) 4. 創建第一個應用4.1 基本應用結構4.2 主窗口與應用生命周期4.3 使用面向…

用 pytorch 從零開始創建大語言模型(三):編碼注意力機制

從零開始創建大語言模型&#xff08;Python/pytorch &#xff09;&#xff08;三&#xff09;&#xff1a;編碼注意力機制 3 編碼注意力機制3.1 建模長序列的問題3.2 使用注意力機制捕捉數據依賴關系3.3 通過自注意力關注輸入的不同部分3.3.1 一個沒有可訓練權重的簡化自注意力…

Spring中的IOC及AOP概述

前言 Spring 框架的兩大核心設計思想是 IOC&#xff08;控制反轉&#xff09; 和 AOP&#xff08;面向切面編程&#xff09;。它們共同解決了代碼耦合度高、重復邏輯冗余等問題。 IOC&#xff08;控制反轉&#xff09; 1.核心概念 控制反轉&#xff08;Inversion of Control…

STM32_HAL開發環境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】

安裝Keil(MDK-ARM)【集成開發環境IDE】 我們會在Keil(MDK-ARM)上去編寫代碼、編譯代碼、燒寫代碼、調試代碼。 Keil(MDK-ARM)的安裝方法&#xff1a; 教學視頻的第02分03秒開始看。 安裝過程中請修改一下下面兩個路徑&#xff0c;避免占用C盤空間。 Core就是Keil(MDK-ARM)的…

python 第三方庫 - dotenv讀取配置文件

.env 文件是一種用于存儲環境變量的配置文件&#xff0c;常用于項目的運行環境設置。環境變量是操作系統層面的一些變量&#xff0c;它們可以被應用程序訪問和使用&#xff0c;通常包含敏感信息或特定于環境的配置&#xff0c;如數據庫連接信息、API 密鑰、調試模式等。 安裝p…

用python壓縮圖片大小

下載庫 cmd開命令或者PyCharm執行都行 pip install pillow2. 然后就是代碼 from PIL import Imagedef compress_image(input_path, output_path, quality85, max_sizeNone):"""壓縮圖片大小。參數:- input_path: 輸入圖片路徑- output_path: 輸出圖片路徑- qu…

【自用記錄】本地關聯GitHub以及遇到的問題

最近終于又想起GitHub&#xff0c;想上傳代碼和項目到倉庫里。 由于很早之前有在本地連接過GitHub&#xff08;但沒怎么用&#xff09;&#xff0c;現在需要重新搞起&#xff08;操作忘得差不多&#xff09;。 在看教程實操的過程中遇到了一些小問題&#xff0c;遂記錄一下。 前…

在一個scss文件中定義變量,在另一個scss文件中使用

_variables.scss文件 : $line-gradient-init-color: linear-gradient(90deg, #8057ff 0%, #936bff 50%, #b892ff 100%); $line-gradient-hover-color: linear-gradient(90deg, #936bff 0%, #b892ff 50%, #f781ce 100%); $line-gradient-active-color: linear-gradient(90deg, …

從零開始研發GPS接收機連載——19、自制GPS接收機的春運之旅

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 從零開始研發GPS接收機連載——19、自制GPS接收機的春運之旅 許久未曾更新這個系列&#xff0c;并非我平日里對這事兒沒了興致&#xff0c;不再愿意折騰。實則是受限于自身條…

智能駕駛功能LCC車道保持居中

畫龍現象就是LCC常見bug LDW車道偏離預警 LKA車道保持 聲音其實就是蜂鳴器 有些車是40 有些是60

Java全棧面試寶典:線程機制與Spring依賴注入深度解析

目錄 一、Java線程核心機制 &#x1f525; 問題3&#xff1a;start()與run()的底層執行差異 線程啟動流程圖解 核心差異對照表 代碼驗證示例 &#x1f525; 問題4&#xff1a;Thread與Runnable的六大維度對比 類關系UML圖 最佳實踐代碼 &#x1f525; 問題5&#xff1…

使用ANTLR4解析Yaml,JSON和Latex

文章目錄 ANTLR4基本使用**1. 安裝 Java 運行時&#xff08;必需&#xff09;****2. 安裝 ANTLR4 命令行工具****方法一&#xff1a;通過包管理器&#xff08;推薦&#xff09;****macOS/Linux (Homebrew)****Windows (Chocolatey)** **方法二&#xff1a;手動安裝&#xff08;…

NixVis 開源輕量級 Nginx 日志分析工具

NixVis NixVis 是一款基于 Go 語言開發的、開源輕量級 Nginx 日志分析工具&#xff0c;專為自部署場景設計。它提供直觀的數據可視化和全面的統計分析功能&#xff0c;幫助您實時監控網站流量、訪問來源和地理分布等關鍵指標&#xff0c;無需復雜配置即可快速部署使用。 演示…

黑盒測試的等價類劃分法(輸入數據劃分為有效的等價類和無效的等價類)

重點: 有效等價和單個無效等價各取1個即可 1、正向用例:一條盡可能覆蓋多條2、逆向用例:每一條數據&#xff0c;都是一條單獨用例。 步驟: 1、明確需求 2、確定有效和無效等價 3、根據有效和無效造數據編寫用例 3、適用場景 針對:需要有大量數據測試輸入&#xff0c; …

Linux Mem -- 通過reserved-memory縮減內存

目錄 1. reserved-memory縮減內存 2. 為什么要通過2段512GB預留內存實現該縮減呢&#xff1f; 3. reserved-momery中的no-map屬性 4. 預留的的內存是否會被統計到系統MemTotal中&#xff1f; 本文是解決具體的一些思考總結&#xff0c;和Linux內核的reserved-memory機制相關…

多線程—synchronized原理

上篇文章&#xff1a; 多線程—鎖策略https://blog.csdn.net/sniper_fandc/article/details/146508232?fromshareblogdetail&sharetypeblogdetail&sharerId146508232&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目錄 1 synchronized的鎖…

AWS混合云部署實戰:打造企業級數字化轉型的“黃金架構”

引言 “上云是必然&#xff0c;但全部上云未必是必然。”在數字化轉型的深水區&#xff0c;企業面臨的核心矛盾日益凸顯&#xff1a;如何在享受公有云敏捷性的同時&#xff0c;滿足數據主權、低延遲和遺留系統兼容的剛性需求&#xff1f; AWS混合云憑借“云上云下一張網”的獨…

進程模型5-0號進程

內核版本架構作者GitHubCSDNLinux-3.0.1armv7-ALux1206 0號進程的作用 在 Linux 中除了 init_task 0號進程&#xff0c;所有的線/進程都是通過 do_fork 函數復制父線/進程創建得到&#xff0c;因為 0號進程產生時沒有任何進程可以參照&#xff0c;只能通過靜態方式構造進程描述…