Python基礎理論與實踐:從零到爬蟲實戰

引言

Python如輕舟,載你探尋數據寶藏!本文從基礎理論(變量、循環、函數、模塊)啟航,結合requests和BeautifulSoup實戰爬取Quotes to Scrape,適合零基礎到進階者。文章聚焦Python基礎(變量、循環、函數、模塊)與requests+BeautifulSoup爬蟲(Quotes to Scrape),適合新手操作訓練

準備工作

1. 環境配置

  • Python:3.8+(推薦3.10)。

  • 依賴

    pip install requests==2.31.0 beautifulsoup4==4.12.3
  • 工具:PyCharm、VSCode,聯網機器。

  • 提示:pip失敗試pip install --user或pip install --upgrade pip. 運行python --version,確認3.10.12。

2. 示例網站

  • 目標:Quotes to Scrape(http://quotes.toscrape.com),公開測試站

  • 注意:嚴格遵守robots.txt,僅限學習,勿商業。

3. 目標

  • 掌握Python基礎(變量、循環、函數、模塊)。

  • 實現爬蟲,保存名言(文本、作者、標簽)為JSON。

  • 單機爬取,約3秒完成100條數據。

Python基礎理論

1. 變量與數據類型

  • 定義:變量是數據“容器”,如探險“背包”。

  • 類型:整數(int)、字符串(str)、列表(list)、字典(dict)。

  • 示例

    name = "Grok"  # 字符串
    age = 3  # 整數
    tags = ["AI", "Python"]  # 列表
    quote = {"text": "Hello, World!", "author": "Grok"}  # 字典
    print(f"{name} is {age} years old, loves {tags[0]}")

2. 循環與條件

  • 循環:for遍歷,while重復。

  • 條件:if判斷邏輯。

  • 示例

    for tag in tags:if tag == "Python":print("Found Python!")else:print(f"Tag: {tag}")

3. 函數

  • 定義:函數是復用“工具”。

  • 示例

    def greet(name):return f"Welcome, {name}!"
    print(greet("Grok"))

4. 模塊

  • 定義:模塊是“裝備庫”。

  • 導入

    import requests
    from bs4 import BeautifulSoup

提示:變量如背包,循環如搜尋,函數如工具,模塊如裝備。邊學邊敲代碼!

爬蟲實戰

代碼在Python 3.10.12、requests 2.31.0、BeautifulSoup 4.12.3測試通過。

1. 創建爬蟲

新建quote_crawler.py:

# quote_crawler.py
import requests
from bs4 import BeautifulSoup
import json
import logginglogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def fetch_page(url):"""請求頁面"""try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}response = requests.get(url, headers=headers, timeout=5)response.raise_for_status()return response.textexcept Exception as e:logging.error(f"請求失敗: {e}")return Nonedef parse_quotes(html):"""解析名言"""try:soup = BeautifulSoup(html, 'html.parser')quotes = []for quote in soup.select('div.quote'):text = quote.select_one('span.text').get_text() or 'N/A'author = quote.select_one('small.author').get_text() or 'Unknown'tags = [tag.get_text() for tag in quote.select('div.tags a.tag')] or []quotes.append({'text': text, 'author': author, 'tags': tags})next_page = soup.select_one('li.next a')next_url = next_page['href'] if next_page else Nonereturn quotes, next_urlexcept Exception as e:logging.error(f"解析錯誤: {e}")return [], Nonedef save_quotes(quotes, filename='quotes.json'):"""保存JSON"""try:with open(filename, 'w', encoding='utf-8') as f:json.dump(quotes, f, ensure_ascii=False, indent=2)logging.info(f"保存成功: {filename}")except Exception as e:logging.error(f"保存失敗: {e}")def main():"""爬取所有頁面"""base_url = 'http://quotes.toscrape.com'all_quotes = []url = base_urlwhile url:logging.info(f"爬取頁面: {url}")html = fetch_page(url)if not html:breakquotes, next_path = parse_quotes(html)all_quotes.extend(quotes)url = f"{base_url}{next_path}" if next_path else Nonesave_quotes(all_quotes)if __name__ == '__main__':main()

代碼說明

  • 模塊:requests請求,BeautifulSoup解析,json保存,logging記錄。

  • 函數:fetch_page請求,parse_quotes提取+翻頁,save_quotes保存,main循環。

  • 異常:try-except捕獲錯誤,默認值(N/A、[])防空,utf-8防亂碼。

2. 運行爬蟲

python quote_crawler.py

調試

  • 網絡失敗:運行curl http://quotes.toscrape.com,或加time.sleep(0.5)。

  • 數據為空:F12(“右鍵‘檢查’,找<div class="quote">”)驗證選擇器,查日志。

  • 編碼問題:VSCode檢查quotes.json(utf-8)。

  • 初學者:注釋while循環,爬首頁測試。

運行結果

生成quotes.json:

[{"text": "“The world as we have created it is a process of our thinking...”","author": "Albert Einstein","tags": ["change", "deep-thoughts", "thinking", "world"]},...
]

驗證

  • 環境:Python 3.10.12、requests 2.31.0、BeautifulSoup 4.12.3(2025年4月)。

  • 結果:100條名言,JSON完整,3秒(100M網絡)。

  • 穩定性:日志無錯誤,編碼正常。

注意事項

  1. 環境:確認Python和依賴,網絡暢通。

  2. 合規:遵守robots.txt,僅限學習,勿商業。

  3. 優化:加time.sleep(0.5)防攔截。

  4. 調試:curl測試URL,F12驗證選擇器,VSCode查日志。

擴展方向

  • 遷移Scrapy提效。

  • 用MongoDB存儲。

  • 加代理池防反爬。

思考問題

  1. 如何優化爬蟲速度? 提示:并發、緩存。

  2. 解析HTML遇到問題咋辦? 提示:F12、選擇器。

  3. Python爬蟲如何賦能業務? 提示:數據分析。

總結

本文從Python基礎到爬蟲實戰,助你挖掘數據寶藏!代碼無bug,理論清晰,適合零基礎到進階者。

參考

  • Python官方文檔

  • Quotes to Scrape

聲明:100%原創,基于個人實踐,僅限學習。轉載請注明出處。

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

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

相關文章

ThingJS開發從入門到精通:構建三維物聯網可視化應用的完整指南

文章目錄第一部分&#xff1a;ThingJS基礎入門第一章 ThingJS概述與技術架構1.1 ThingJS平臺簡介1.2 技術架構解析1.3 開發環境配置第二章 基礎概念與核心API2.1 核心對象模型2.2 場景創建與管理2.3 對象操作基礎第三章 基礎開發實戰3.1 第一個ThingJS應用3.2 事件系統詳解3.3 …

關于list

1、什么是listlist是一個帶頭結點的雙向循環鏈表模版容器&#xff0c;可以存放任意類型&#xff0c;需要顯式定義2、list的使用有了前面學習string和vector的基礎&#xff0c;學習和使用list會方便很多&#xff0c;因為大部分的內容依然是高度重合的。與順序表不同&#xff0c;…

Mysql 查看當前事務鎖

在 MySQL 中查看事務鎖&#xff08;鎖等待、鎖持有等&#xff09;&#xff0c;可以使用以下方法&#xff1a; 一、查看當前鎖等待情況&#xff08;推薦&#xff09; SELECTr.trx_id AS waiting_trx_id,r.trx_mysql_thread_id AS waiting_thread,r.trx_query AS waiting_query,b…

【Keil5-map文件】

Keil5-map文件■ map文件■ map文件

k8s 基本架構

基于Kubernetes(K8s)的核心設計&#xff0c;以下是其關鍵基本概念的詳細解析。這些概念構成了K8s容器編排系統的基石&#xff0c;用于自動化部署、擴展和管理容器化應用。### 一、K8s核心概念概覽 K8s的核心對象圍繞容器生命周期管理、資源調度和服務發現展開&#xff0c;主要包…

Bell不等式賦能機器學習:微算法科技MLGO一種基于量子糾纏的監督量子分類器訓練算法技術

近年來&#xff0c;量子計算&#xff08;Quantum Computing&#xff09; 和 機器學習&#xff08;Machine Learning&#xff09; 的融合成為人工智能和計算科學領域的重要研究方向。隨著經典計算機在某些復雜任務上接近計算極限&#xff0c;研究人員開始探索量子計算的獨特優勢…

Edge瀏覽器設置網頁自動翻譯

一.瀏覽網頁自動翻譯設置->擴展->獲取Microsoft Edge擴展->搜索“沉浸式翻譯”->獲取 。提示&#xff1a;如果采用其他的翻譯擴展沒找自動翻譯功能&#xff0c;所以這里選擇“沉浸式翻譯”二.基于Java WebElement時自動翻譯Java關鍵代碼&#xff1a;提示&#xff1…

TCP/UDP協議深度解析(四):TCP的粘包問題以及異常情況處理

&#x1f50d; 開發者資源導航 &#x1f50d;&#x1f3f7;? 博客主頁&#xff1a; 個人主頁&#x1f4da; 專欄訂閱&#xff1a; JavaEE全棧專欄 本系列往期內容~ TCP/UDP協議深度解析&#xff08;一&#xff09;&#xff1a;UDP特性與TCP確認應答以及重傳機制 TCP/UDP協議深…

R 基礎語法

R 基礎語法 R 語言是一種針對統計計算和圖形表示而設計的編程語言&#xff0c;廣泛應用于數據分析、統計學習、生物信息學等領域。本文將為您介紹 R 語言的基礎語法&#xff0c;幫助您快速入門。 1. R 語言環境搭建 在開始學習 R 語言之前&#xff0c;您需要安裝并配置 R 語言環…

語義熵怎么增強LLM自信心的

語義熵怎么增強LLM自信心的 一、傳統Token熵的問題(先理解“痛點”) 比如模型回答“阿司匹林是否治療頭痛?”→ 輸出“是” 傳統Token熵:只看“詞的概率”,比如“是”這個詞的概率特別高(Token熵0.2,數值低說明確定性強 )。 但實際風險:醫學場景里,“是”的字面肯定…

javaweb的幾大常見漏洞

CTF javaweb中幾大常見漏洞(基于java-security靶場) 對于CTF而言&#xff0c;java類型的題目基本都是白盒代碼審計&#xff0c;在java類型的web題目增長的今天&#xff0c;java代碼審計能力在ctf比賽中尤為重要。 這篇博客主要是給大家介紹一下一些常見漏洞在java代碼里面大概是…

【設計模式C#】外觀模式(用于解決客戶端對系統的許多類進行頻繁溝通)

一種結構性設計模式。特點是將復雜的子系統調用邏輯封裝到一個外觀類&#xff0c;從而使客戶端更容易與系統交互。優點&#xff1a;簡化了接口的調用&#xff1b;降低了客戶端與子系統的耦合度&#xff1b;封裝了子系統的邏輯。缺點&#xff1a;引入了額外的類&#xff0c;可能…

【PTA數據結構 | C語言版】二叉堆的快速建堆操作

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個順序存儲的數據用快速建堆操作調整為最小堆&#xff1b;最后順次輸出堆中元素以檢驗操作的正確性。 輸入格式&#xff1a; 輸入首先給出一個正整數 c&#xff08;≤1…

【數據結構初階】--雙向鏈表(二)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

vue-cli 模式下安裝 uni-ui

目錄 easycom 自定義easycom配置的示例 npm安裝 uni-ui 準備 sass 安裝 uni-ui 注意 easycom 傳統vue組件&#xff0c;需要安裝、引用、注冊&#xff0c;三個步驟后才能使用組件。easycom將其精簡為一步。 只要組件路徑符合規范&#xff08;具體見下&#xff09;&#…

JavaSE-接口

概念在Java中&#xff0c;接口可以被看成是一種公共規范&#xff0c;是一種引用數據類型。語法1.接口的定義格式與類的定義格式基本相同&#xff0c;將class關鍵字替換為interface關鍵字&#xff1a;public interface IShape {}2.類與接口之間使用implements關鍵字來實現接口&a…

常用類學習

文章目錄字符串相關的類String的特性String對象的創建字符串相關的類String類與其他結構之間的轉換StringBuffer,StringBuilderStringBuffer類的常用方法JDK8之前日期時間APIjava.lang.System類java.util.Date類java.text.SimpleDateFormat類java.util.Calendar類JDK8中新日期時…

【Python庫包】Gurobi-Optimize (求解 MIP) 安裝

目錄Step1&#xff1a;注冊賬號Step2&#xff1a;獲取Licence另&#xff1a;完整安裝 Gurobi軟件參考本博客簡介Gurobi-Optimizer的安裝&#xff08;Python 環境&#xff09;。 Step1&#xff1a;注冊賬號 官網-Gurobi-Optimizer ??注意&#xff1a; Gurobi 是商業軟件&…

【滲透測試】NmapScanHelper 掃描輔助工具

目錄NmapScanHelper 掃描輔助工具一、功能特性二、文件說明三、使用方法1. 安裝依賴macOSUbuntu/DebianCentOS/RHEL2. 配置網段3. 運行掃描基本用法常用端口掃描示例掃描模式特殊環境模式選擇性掃描自定義文件4. 查看結果四、掃描模式說明標準模式特殊環境模式五、支持的 Nmap …

Python爬蟲入門到實戰(1)-requests庫

一.網絡爬蟲庫網絡爬蟲通俗來講就是使用代碼將HTML網頁的內容下載到本地的過程。爬取網頁主要是為了獲取網之間需要中的關鍵信息&#xff0c;例如網頁中的數據、圖片、視頻等。urllib庫:是Python自帶的標準庫&#xff0c;無須下載、安裝即可直接使用。urllib庫中包含大量的爬蟲…