python爬取新浪財經網站上行業板塊股票信息的代碼

????????在這個多行業持續高速發展的時代,科技正在改變著我們的生活。 在世界科技領域中,中國正占據越來越重要的位置。當下,每個行業都提到了區塊鏈、人工智能、大數據、5G等科技力量,強調了科技在行業咨詢與數據分析領域的重要意義。

????????隨著大數據時代的到來,人工智能等前沿的科技在算法上深刻改變了各個行業,并成為未來行業發展的制高點。隨著人工智能發展而風靡于世的Python,有著簡單易學、運行速度快、可移植、可拓展、可嵌入以及第三方庫豐富等特點,因而在數學、大數據分析以及行業數據和財務數據分析中都有著得天獨厚的優勢。

????????Python的語法很容易實現那些金融算法和數據計算,每個數學語句都能轉變成一行Python代碼,每行代碼都能允許超過十萬次的計算量。Python 效率較為明顯的領域之一是交互式的數據分析,對于大數據來說,它無疑是一個極為合適的選擇。這一領域從IPython、Jupyter Notebook等有力工具和Pandas之類的程序庫中獲益良多。? ?

????????用幾行代碼就足以完成行業分析中的典型復雜任務——數據收集、復雜和重復的數學計算以及結果的可視化,令人覺得不可思議。我們在熟練應用Python工具和庫的時候,應將焦點放在自身的領域上,而不用關心復雜的技術細節。分析者們可以快速反應,幾乎可以實時地提供寶貴的意見,確保自己比競爭對手先行一步。這種效率的提高很容易轉換為可度量的財務效果。

????????“巧婦難為無米之炊”,找不到數據,量化分析也就無從談起。對于行業分析來說,獲取數據是量化分析的第一步。Python的強大功能之一就是數據獲取(爬蟲技術) 。例如,我們在做一些行業分析的時候,需要找到自己的同業競爭者,并且是有公開信息可查的同業競爭者,那就需要從眾多上市公司中進行篩選。本項目的行業數據就是通過爬取新浪財經網站上行業板塊的股票信息得到的,如圖所示。

????????接下來我們就寫一個爬蟲,這個爬蟲程序通過以下步驟獲取新浪財經的行業板塊股票信息

  1. 首先請求行業板塊頁面并解析出各行業的鏈接
  2. 然后遍歷每個行業板塊,獲取該行業下的所有股票信息
  3. 對獲取的股票數據進行結構化處理
  4. 將最終結果保存為 CSV 文件

????????程序包含了完善的錯誤處理和日志記錄功能,同時通過隨機延時避免被目標網站封禁 IP。在使用時,可能需要根據新浪財經網站的實際結構調整 HTML 解析部分的選擇器。

? ? ? ? 接下來我們就從原理、環境安裝、庫的選擇與使用、代碼組織以及具體實現等步驟來實現:

一、運行環境及安裝

(一)運行環境要求
  1. Python 版本:建議 Python 3.7 及以上版本(兼容主流 Python 3.x 版本,確保對現代庫的支持),當前的執行環境是在Python 3.13上完成的。
  2. 操作系統:兼容 Windows、macOS、Linux(代碼中文件路徑處理使用os.path,跨平臺適配)。
(二)環境安裝步驟
  1. 安裝 Python
    從Python 官網下載對應系統的 Python 安裝包,安裝時勾選 “Add Python to PATH”(添加到環境變量),完成后通過python --versionpy --version驗證安裝成功。

  2. 安裝依賴庫
    代碼依賴多個第三方庫,通過pip命令統一安裝:

    pip install selenium webdriver-manager beautifulsoup4 pandas lxml  
    

    其中beautifulsoup4 安裝時也可以用名稱bs4。(若安裝失敗,可嘗試使用pip3或管理員權限運行命令)

二、使用的庫及作用

(一)核心功能庫
  1. selenium

    • Selenium是一款自動化測試利器,可以自動化模擬人操作瀏覽器的行為,所以也可以用于網絡爬蟲。Selenium調用瀏覽器必須有一個WebDriver驅動文件,下載好后把驅動程序放到Python安裝目錄里即可。
    • 作用:模擬瀏覽器行為,處理動態加載頁面(新浪財經的股票數據通過 JavaScript 動態渲染,requests無法獲取,需用瀏覽器模擬)。
    • 關鍵功能:自動打開瀏覽器、訪問 URL、等待頁面加載、獲取渲染后的頁面源碼。
  2. webdriver-manager

    • 作用:自動管理瀏覽器驅動(如 ChromeDriver),無需手動下載和配置驅動路徑,解決驅動版本與瀏覽器不匹配的問題。
  3. beautifulsoup4(bs4)

    • 為了向用戶友好地顯示,請求的網頁返回數據中包含了大量的HTML 標簽、CSS語句、JavaScript語句等,我們要在返回的文檔中提取出所要的數據不是件容易的事情。Beautiful Soup可以通過解析返回的文檔,提供一些簡單的函數,為用戶提供需要抓取的數據。有了它,我們可以很方便地提取出HTML或XML標簽中的內容。
    • 作用:解析 HTML 頁面源碼,提取表格、字段等結構化數據(將復雜的 HTML 轉換為可遍歷的對象,便于定位和提取數據)。
  4. lxml

    • 作用:作為 BeautifulSoup 的解析器,提高 HTML 解析效率和準確性(比 Python 內置的html.parser更快,支持復雜選擇器)。
(二)數據處理與工具庫
  1. pandas

    • 作用:處理結構化數據,將提取的股票信息轉換為 DataFrame,最終保存為 CSV 文件(簡化數據存儲流程,支持中文編碼)。
  2. os

    • 作用:處理文件路徑,確保所有生成的文件(CSV、日志、HTML 源碼)保存到腳本所在目錄(跨平臺適配路徑格式)。
  3. re

    • 作用:通過正則表達式清洗數據(去除數字中的逗號、百分號等符號,轉換為標準數值類型)。
  4. time

    • 作用:添加延時,確保頁面數據完全渲染(動態頁面加載需要時間,避免提前獲取未完成的內容)。
  5. logging

    • 作用:記錄程序運行日志(包括成功信息、錯誤提示、調試詳情),便于排查問題(比print更靈活,可保存到文件)。

三、代碼樹形結構

? ? ? ? 以下是我們實現的代碼的完整樹形結構:

SinaStockScraper.py  # 主腳本文件  
├─ 全局變量定義  
│  └─ script_dir  # 腳本所在目錄路徑(通過os.path獲取)  
├─ 日志配置(logging.basicConfig)  
│  └─ 日志文件:行業板塊爬取日志.log(保存到script_dir)  
├─ SinaIndustryScraper類  # 核心類,封裝所有功能  
│  ├─ __init__方法  # 初始化類屬性  
│  ├─ 工具方法  
│  │  ├─ get_script_dir_file(filename)  # 生成腳本目錄下的文件路徑  
│  │  ├─ clean_number(text, is_float)  # 清洗數字(去除符號、轉換類型)  
│  │  └─ clean_percent(text)  # 清洗百分比(去除%、轉換為浮點數)  
│  ├─ 核心功能方法  
│  │  ├─ fetch_page()  # 獲取動態頁面并保存源碼  
│  │  ├─ parse_table(html)  # 解析HTML,提取11個目標字段  
│  │  └─ save_data()  # 將提取的數據保存為CSV  
│  └─ 主運行方法  
│     └─ run()  # 串聯所有步驟(調用fetch_page→parse_table→save_data)  
└─ 主程序入口(if __name__ == "__main__":)  └─ 實例化SinaIndustryScraper并調用run()方法  

? ? ? ? 以下是完整的程序代碼

import os
import re
import time
import logging
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd# 獲取腳本所在目錄(確保所有文件保存在此目錄)
script_dir = os.path.dirname(os.path.abspath(__file__))# 配置日志(保存到腳本目錄)
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',filename=os.path.join(script_dir, '行業板塊爬取日志.log')
)
logger = logging.getLogger(__name__)class SinaIndustryScraper:def __init__(self):# 瀏覽器配置self.options = webdriver.ChromeOptions()self.options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36")self.options.add_experimental_option("excludeSwitches", ["enable-automation"])self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=self.options)# 規避反爬檢測self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"})self.target_url = 'https://finance.sina.com.cn/stock/sl/#industry_1'self.data = []  # 存儲提取的11個字段數據def get_script_dir_file(self, filename):"""生成腳本目錄下的文件路徑"""return os.path.join(script_dir, filename)def fetch_page(self):"""獲取頁面并保存源碼到腳本目錄"""try:self.driver.get(self.target_url)# 等待表格加載(最長30秒)WebDriverWait(self.driver, 30).until(EC.presence_of_element_located((By.TAG_NAME, 'table')))# 確保數據完全渲染time.sleep(2)# 保存頁面源碼到腳本目錄(用于調試)page_path = self.get_script_dir_file('頁面源碼.html')with open(page_path, 'w', encoding='utf-8') as f:f.write(self.driver.page_source)logger.info(f"頁面源碼已保存至:{page_path}")return self.driver.page_sourceexcept Exception as e:logger.error(f"頁面加載失敗:{str(e)}")return Nonefinally:self.driver.quit()def clean_number(self, text, is_float=False):"""清洗數字(去除逗號、空格,轉換類型)"""if not text.strip():return Nonecleaned = re.sub(r'[,\s]', '', text.strip())try:return float(cleaned) if is_float else int(cleaned)except:return text  # 保留原始文本(用于調試)def clean_percent(self, text):"""清洗漲跌幅(去除%,轉換為浮點數)"""if not text.strip():return Nonecleaned = re.sub(r'[%\s]', '', text.strip())try:return float(cleaned)except:return text  # 保留原始文本def parse_table(self, html):"""精準提取11個指定字段"""if not html:returnsoup = BeautifulSoup(html, 'lxml')# 定位數據表格(優先選擇行數量最多的表格)tables = soup.find_all('table')if not tables:logger.error("未找到表格")returntarget_table = max(tables, key=lambda t: len(t.find_all('tr')))  # 選行數最多的表格rows = target_table.find_all('tr')if len(rows) < 2:logger.error("表格無數據行")return# 解析表頭(用于校驗字段順序)header_cells = rows[0].find_all(['th', 'td'])headers = [cell.text.strip() for cell in header_cells]logger.info(f"表頭字段:{headers}")  # 日志打印表頭,方便核對# 解析數據行(從第二行開始)for row in rows[1:]:cells = row.find_all('td')if len(cells) < 11:  # 確保至少有11列(匹配11個字段)continuetry:# 嚴格對應11個字段(按頁面順序)row_data = {# 行業基礎數據'板塊': cells[0].text.strip(),'公司家數': self.clean_number(cells[1].text.strip()),'平均價格': self.clean_number(cells[2].text.strip(), is_float=True),'漲跌額': self.clean_number(cells[3].text.strip(), is_float=True),'漲跌幅(%)': self.clean_percent(cells[4].text.strip()),'總成交量(手)': self.clean_number(cells[5].text.strip()),'總成交額(萬元)': self.clean_number(cells[6].text.strip(), is_float=True),# 領漲股數據(區分行業字段,避免重名)'領漲股': cells[7].text.strip(),'領漲股漲跌幅(%)': self.clean_percent(cells[8].text.strip()),'領漲股當前價': self.clean_number(cells[9].text.strip(), is_float=True),'領漲股漲跌額': self.clean_number(cells[10].text.strip(), is_float=True)}self.data.append(row_data)logger.debug(f"已提取:{row_data['板塊']}")except Exception as e:logger.warning(f"行解析失敗:{str(e)},行內容:{row.text[:100]}")def save_data(self):"""保存CSV到腳本目錄"""if not self.data:print("未提取到有效數據,請查看日志和【頁面源碼.html】")return# CSV文件保存到腳本目錄csv_path = self.get_script_dir_file('行業板塊數據.csv')df = pd.DataFrame(self.data)# 確保字段順序與需求一致df = df[['板塊', '公司家數', '平均價格', '漲跌額', '漲跌幅(%)','總成交量(手)', '總成交額(萬元)', '領漲股','領漲股漲跌幅(%)', '領漲股當前價', '領漲股漲跌額']]df.to_csv(csv_path, index=False, encoding='utf-8-sig')print(f"數據提取完成!共 {len(self.data)} 條記錄")print(f"CSV文件已保存至:{csv_path}")logger.info(f"數據已保存至:{csv_path}")def run(self):print("開始爬取行業板塊數據...")html = self.fetch_page()if not html:print("爬取失敗,請查看日志:行業板塊爬取日志.log")returnself.parse_table(html)self.save_data()if __name__ == "__main__":scraper = SinaIndustryScraper()scraper.run()

四、代碼定義及函數作用

(一)全局變量與日志配置
  1. script_dir

    • 定義:script_dir = os.path.dirname(os.path.abspath(__file__))
    • 作用:通過os.path獲取腳本所在目錄的絕對路徑,確保所有生成的文件(CSV、日志等)統一保存至此目錄,避免路徑混亂。
  2. 日志配置(logging.basicConfig)

    • 定義:配置日志級別(INFO)、格式(包含時間、級別、信息)、輸出文件(行業板塊爬取日志.log)。
    • 作用:記錄程序運行過程(如 “頁面加載成功”“解析失敗”),便于調試和追蹤問題(日志文件保存到腳本目錄)。
(二)SinaIndustryScraper 類
1.?__init__方法(初始化)
  • 定義:
    def __init__(self):  # 瀏覽器配置(規避反爬、設置User-Agent)  # 初始化驅動、目標URL、數據存儲列表等  
    
  • 作用:
    • 配置瀏覽器參數(禁用自動化特征、設置模擬瀏覽器的 User-Agent),降低被反爬檢測的概率。
    • 初始化 Selenium 瀏覽器驅動(通過 webdriver_manager 自動管理)。
    • 定義目標 URL(新浪財經行業板塊頁面)和數據存儲列表(self.data)。
2. 工具方法

(1)get_script_dir_file(filename)

  • 定義:def get_script_dir_file(self, filename): return os.path.join(script_dir, filename)
  • 作用:接收文件名,返回腳本目錄下的完整路徑(確保所有文件保存到腳本所在目錄)。

? ? ? ? ?程序正確執行,會產生三個文件。

(2)clean_number(text, is_float=False)

  • 定義:通過正則表達式去除文本中的逗號、空格,根據is_float參數轉換為intfloat
  • 作用:清洗 “公司家數”“總成交量” 等數值型數據(如將 “1,234” 轉換為 1234),確保數據格式規范。

(3)clean_percent(text)

  • 定義:去除文本中的百分號(%),轉換為float(如將 “+2.34%” 轉換為 2.34)。
  • 作用:清洗 “漲跌幅” 字段,統一為數值類型(便于后續數據分析)。
3. 核心功能方法

(1)fetch_page()

  • 定義:
    def fetch_page(self):  # 用Selenium打開目標URL,等待表格加載  # 保存頁面源碼到HTML文件,返回頁面源碼  
    
  • 作用:
    • 模擬瀏覽器訪問頁面,通過WebDriverWait等待表格加載完成最長 30 秒)。
    • 保存頁面源碼到 “頁面源碼.html”(用于調試,確認是否包含數據),如下圖。
    • 返回加載完成的頁面 HTML,供后續解析。

(2)parse_table(html)

  • 定義:
    def parse_table(self, html):  # 用BeautifulSoup解析HTML,定位數據表格  # 提取11個目標字段,通過clean方法清洗后存入self.data  
    
  • 作用:
    • 定位頁面中的數據表格(優先選擇行數最多的表格,確保是目標數據)。
    • 解析表頭和數據行,按順序提取 11 個字段(板塊、公司家數、平均價格等)。
    • 調用clean_numberclean_percent清洗數據,最終存入self.data列表。

(3)save_data()

  • 定義:
    def save_data(self):  # 將self.data轉換為DataFrame,按指定順序保存為CSV  
    
  • 作用:
    • 若數據為空,提示用戶查看日志和源碼文件
    • 若數據有效,用 pandas 將self.data轉換為 DataFrame,按 11 個字段的順序保存為 “行業板塊數據.csv”(確保字段順序與需求一致)。

4. 主運行方法run()
  • 定義:
    def run(self):  # 串聯流程:調用fetch_page獲取頁面→調用parse_table解析數據→調用save_data保存結果  
    
  • 作用:作為程序入口,依次執行 “獲取頁面→解析數據→保存結果” 的完整流程,并輸出關鍵信息(如爬取成功 / 失敗提示)。
(三)主程序入口
  • 定義:if __name__ == "__main__": scraper = SinaIndustryScraper(); scraper.run()
  • 作用:當腳本直接運行時,實例化SinaIndustryScraper類并調用run()方法,啟動整個爬取流程。

? ? ? ? 運行效果如下:

? ? ? ? 得到如下表格:

總結

????????代碼通過封裝成SinaIndustryScraper類,實現了 “動態頁面獲取→數據解析清洗→結果保存” 的完整流程,依賴多庫協同處理動態頁面、HTML 解析、數據清洗和文件管理,最終精準提取 11 個行業板塊字段并保存到指定目錄。

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

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

相關文章

【JAVA】監聽windows中鼠標側面鍵的按鈕按下事件

監聽windows中鼠標側面鍵的按鈕按下事件用到的包核心類使用這個類用到的包 jna-5.11.0.jar jna-platform-5.11.0.jar核心類 package sample.tt.mouse;import com.sun.jna.Pointer; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.WinDef.HMODULE; …

Redis突發寫入阻斷?解析“MISCONF Redis is configured to save RDB…“故障處理

當你的Redis服務器突然拒絕寫入并拋出 MISCONF Redis is configured to save RDB snapshots... 錯誤時&#xff0c;別慌&#xff01;這是Redis的數據安全保護機制在發揮作用。本文帶你深度解析故障根因&#xff0c;并提供完整的解決方案。&#x1f525; 故障現象還原 客戶端&am…

產品更新丨谷云科技 iPaaS 集成平臺 V7.6 版本發布

六月&#xff0c;谷云科技iPaaS集成平臺更新了V7.6版本。這次更新中我們著重對API網關、API編排、組織管理權限、API監控等功能進行了增強以及優化&#xff0c;一起來看看有什么新變化吧&#xff01; 網關、監控、編排、組織權限全方位升級 1.API網關 錯誤碼預警&#xff0c;可…

圖像處理中的模板匹配:原理與實現

目錄 一、什么是模板匹配&#xff1f; 二、模板匹配的匹配方法 1. 平方差匹配&#xff08;cv2.TM_SQDIFF&#xff09; 2. 歸一化平方差匹配&#xff08;cv2.TM_SQDIFF_NORMED&#xff09; 3. 相關匹配&#xff08;cv2.TM_CCORR&#xff09; 4. 歸一化相關匹配&#xff08…

高性能架構模式——高性能NoSQL

目錄 一、關系數據庫的缺點二、常見的 NoSQL 方案分 類2.1、K-V 存儲2.2、文檔數據庫2.3、列式數據庫2.4、全文搜索引擎三、高性能 NoSQL 方案的典型特征和應用場景3.1、K-V 存儲典型特征和應用場景3.2、文檔數據庫典型特征和應用場景3.1.1、文檔數據庫的 no-schema 特性的優勢…

正確選擇光伏方案設計軟件:人力成本優化的關鍵一步

在競爭激烈的市場環境中&#xff0c;企業無不追求效率提升與成本控制。設計環節作為產品開發的核心流程&#xff0c;其效率高低直接影響整體項目進度與資源消耗。錯誤的設計軟件選擇如同在信息高速公路上設置路障——它不會阻止前行&#xff0c;卻會讓每一次溝通、每一次修改都…

Git問題排查與故障解決詳解

前言 在使用Git進行版本控制的過程中&#xff0c;開發者常常會遇到各種各樣的問題和錯誤。本文將詳細介紹常見的Git問題及其解決方法&#xff0c;幫助開發者快速定位和解決問題&#xff0c;避免在開發過程中浪費時間。 1. 基礎錯誤與解決 1.1 身份配置問題 問題&#xff1a…

使用Xinference部署語音模型實現文本轉語音:完整指南

文章目錄引言環境準備1. 安裝Xinference2. 啟動Xinference服務3. 部署語音模型Python實現文本轉語音關鍵參數說明應用場景性能優化建議常見問題解決結語引言 文本轉語音&#xff08;Text-to-Speech, TTS&#xff09;技術在智能助手、有聲讀物、語音導航等應用中扮演著重要角色…

【C#】實體類定義的是long和值識別到的是Int64,實體類反射容易出現Object does not match target type

&#x1f339;歡迎來到《小5講堂》&#x1f339; &#x1f339;這是《C#》系列文章&#xff0c;每篇文章將以博主理解的角度展開講解。&#x1f339; &#x1f339;溫馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不對之處望指正&#xff01;&#…

C#獲取當前系統賬戶是否為管理員賬戶

傳統方式&#xff1a;WindowsPrincipal winPrincipal new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool admin winPrincipal.IsInRole(WindowsBuiltInRole.Administrator);這種方式雖然是最常用的檢測管理員權限的方法&#xff0c;但是有個致命的缺陷&#xff0c;就…

【c++深入系列】:萬字詳解list(附模擬實現的list源碼)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 當你覺得累的時候&#xff0c;說明你在走上坡路 ★★★ 本文前置知識&#xff1a; 模版 那么在之前的學習中&#xff0c;我們已經學習了…

PandaWiki與GitBook深度對比:AI時代的知識管理工具,選誰好?

在當今信息爆炸的時代&#xff0c;知識管理工具已成為個人學習、團隊協作和企業文檔管理的必需品。PandaWik作為AI時代迅速崛起的廣受歡迎知識管理平臺&#xff0c;代表了新一代AI驅動的知識庫系統。本文將從功能特性、技術架構、適用場景等多個維度進行全面對比分析。產品定位…

清除 Android 手機 SIM 卡數據的4 種簡單方法

SIM 卡存儲了聯系人、短信和通話記錄等信息。在更換新 SIM 卡之前&#xff0c;徹底清除舊卡上的所有個人數據&#xff08;如 SIM 卡聯系人、短信、通話記錄和手機號碼&#xff09;非常重要。要在 Android 手機上清除 SIM 卡內存&#xff0c;您可以參考以下方法。但在開始之前&a…

算法學習筆記:20.分治法——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

分治法&#xff08;Divide and Conquer&#xff09;是計算機科學中最經典的算法設計思想之一&#xff0c;其核心思想是將復雜問題分解為若干個規模較小的子問題&#xff0c;通過解決子問題并合并結果來求解原問題。這種思想不僅在排序、搜索等基礎算法中廣泛應用&#xff0c;也…

@classmethod

1. 基本概念 classmethod 是 Python 中用于定義類方法的一種裝飾器。類方法與常規的實例方法不同&#xff0c;它的第一個參數是 cls&#xff0c;表示類本身&#xff0c;而不是實例。 class MyClass:class_attr "Class Attribute"classmethoddef class_method(cls):p…

Qt 中使用 SQLite 數據庫

一、SQLite 數據庫介紹 SQLite 是一個輕量級的嵌入式關系型數據庫管理系統&#xff0c;它以庫的形式提供&#xff0c;不需要單獨的服務器進程&#xff0c;直接訪問存儲在普通磁盤文件中的數據庫。 主要特性 無服務器架構&#xff1a;SQLite 不需要單獨的服務器進程 零配置&a…

【Unity】IL2CPP相關理論知識學習

一種編譯技術。優點&#xff1a;性能優化&#xff1a;IL2CPP生成C代碼后由本地編譯器優化&#xff0c;一般在CPU性能和GC方面都優于Mono。特別在移動端或主機平臺&#xff0c;性能差距更加明顯。跨平臺支持&#xff1a;Unity作為跨平臺引擎&#xff0c;IL2CPP是支持iOS、Androi…

一個用于在 Ubuntu 22.04.3 LTS 上顯示文件系統超級塊信息的 C 程序

1.程序#include <stdio.h> #include <sys/statvfs.h> #include <errno.h>int main(int argc, char *argv[]) {const char *path;struct statvfs fs_info;// 檢查參數if (argc ! 2) {fprintf(stderr, "用法: %s <掛載點或路徑>\n", argv[0]);…

Git未檢測到文件更改

背景 在本地倉庫改動文件發現git檢測不到修改了的文件&#xff0c;安裝有Git狀態可視化工具&#xff0c;文件改動后應該是紅色標記&#xff0c;但是仍然是綠色的 git status&#xff0c;git diff等也都沒有顯示文件改動 原因 1.可能是文件命中了.gitignore文件過濾條件 檢查后發…

Golang學習之常見開發陷阱完全手冊

1. 指針的“溫柔陷阱”&#xff1a;空指針與野指針的致命一擊Go語言的指針雖然比C/C簡單&#xff0c;但照樣能讓你“痛不欲生”。新手常覺得Go的指針“安全”&#xff0c;但真相是&#xff1a;Go并不會幫你完全規避指針相關的Bug。空指針&#xff08;nil pointer&#xff09;和…