新手學習爬蟲的案例

首先你的電腦上肯定已經安裝了python,沒安裝的去官網安裝,我使用的是Pycharm作為操作的IDE

環境準備

安裝必要的庫

爬蟲需要用到requests和beautifulsoup4

使用命令行或者終端運行下面的命令

pip install requests beautifulsoup4 -i https://mirrors.aliyun.com/pypi/simple

這里使用的是阿里云的鏡像源,下載的快一點

下載完成之后可以使用下面這段代碼檢驗下載的結果

import requests
from bs4 import BeautifulSoup
print("所有庫安裝成功!")

封面等內容的爬取

接下來是一段爬蟲的代碼,我們逐行對它進行講解

import requests
from bs4 import BeautifulSoup# 1. 定義目標URL
url = "http://books.toscrape.com/"try:# 2. 發送HTTP請求response = requests.get(url)# 檢查請求是否成功(狀態碼200表示成功)response.raise_for_status()  # 3. 解析HTML內容soup = BeautifulSoup(response.text, "html.parser")# 4. 定位所有書籍的容器books = soup.find_all("article", class_="product_pod")# 5. 遍歷每個書籍容器并提取信息for book in books:# 提取書名title = book.h3.a["title"]# 提取價格price = book.find("p", class_="price_color").text# 提取評分(例如:"Three" -> 3星)rating = book.p["class"][1]# 打印結果print(f"書名: {title}")print(f"價格: {price}")print(f"評分: {rating} 星")print("-" * 50)except requests.exceptions.RequestException as e:print(f"請求失敗: {e}")
except Exception as e:print(f"發生錯誤: {e}")

分步詳解

  1. 導入庫?
     import requests # 用于發送HTTP請求 from bs4 import BeautifulSoup # 用于解析HTML

    ?

  2. 發送HTTP請求
    url = "http://books.toscrape.com/"
    response = requests.get(url)
    response.raise_for_status()  # 如果狀態碼不是200,拋出異常


    requests.get(url):向目標URL發送GET請求。
    response.raise_for_status():檢查請求是否成功(狀態碼200),失敗則拋出異常。

  3. 解析HTML內容
    soup = BeautifulSoup(response.text, "html.parser")


    response.text:獲取網頁的HTML文本內容
    BeautifulSoup():將HTML文本轉換為可操作的對象(DOM樹)。

  4. 定位書籍容器
    books = soup.find_all("article", class_="product_pod")


    find_all():查找所有符合條件的目標元素。
    article 是標簽名,class
    ="product_pod" 是類名(注意 class_ 的寫法)。

  5. 提取書籍信息
    for book in books:title = book.h3.a["title"]  # 書名存儲在a標簽的title屬性中price = book.find("p", class_="price_color").text  # 價格在p標簽的文本中rating = book.p["class"][1]  # 評分在p標簽的第二個類名中(如 "star-rating Three")


    book.h3.a["title"]:通過層級關系直接定位到書名。
    find("p", class
    ="price_color"):在書籍容器內查找價格元素。
    book.p"class":評分通過類名的第二部分獲取(例如 Three 表示3星)。

  6. 錯誤處理
    except requests.exceptions.RequestException as e:print(f"請求失敗: {e}")
    except Exception as e:print(f"發生錯誤: {e}")


    捕獲網絡請求錯誤和其他異常,避免程序崩潰。 運行結果示例

????????運行結果示例

書名: A Light in the Attic 價格: £51.77

評分: Three 星

書名: Tipping the Velvet 價格: £53.74

評分: One 星

...

與該網站中的信息進行比對,發現爬取成功

?接下來我們進入每一本書的詳情頁面,并爬取該頁面中的Product_Description

?詳情頁面爬取

將上面的代碼更改為下面這一段代碼

import requests
from bs4 import BeautifulSoup
import os# 目標網站
url = "http://books.toscrape.com/"# 創建文件夾保存圖片
if not os.path.exists("book_covers"):os.makedirs("book_covers")try:# 發送請求response = requests.get(url)response.raise_for_status()# 解析HTMLsoup = BeautifulSoup(response.text, "html.parser")books = soup.find_all("article", class_="product_pod")for book in books:# 提取書名(用于命名圖片文件)title = book.h3.a["title"].strip().replace("/", "-")  # 去除非法字符# 提取封面圖片的相對路徑(如:../../media/.../image.jpg)image_relative_url = book.img["src"]# 將相對路徑轉換為絕對URLimage_absolute_url = url + image_relative_url.replace("../", "")# 下載圖片image_response = requests.get(image_absolute_url, stream=True)image_response.raise_for_status()# 保存圖片到本地filename = f"book_covers/{title}.jpg"with open(filename, "wb") as f:for chunk in image_response.iter_content(1024):f.write(chunk)print(f"已下載封面: {title}")except requests.exceptions.RequestException as e:print(f"請求失敗: {e}")
except Exception as e:print(f"發生錯誤: {e}")

分步解釋

  1. 創建保存圖片的文件夾
    import os
    if not os.path.exists("book_covers"):os.makedirs("book_covers")

    使用 os 模塊檢查并創建文件夾,避免重復下載時文件覆蓋。

  2. 定位封面圖片的URL

    查看圖片的HTML結構: 右鍵點擊封面圖片 → 檢查,發現結構如下:

    <img src="../../media/cache/2c/da/2cdad67c.../a-light-in-the-attic_1000.jpg" alt="A Light in the Attic" class="thumbnail">

    src 屬性包含圖片的 相對路徑(如 ../../media/...)。

    處理相對路徑

    相對路徑需要拼接網站的完整URL:

    image_relative_url = book.img["src"]  # 例如:../../media/...
    image_absolute_url = url + image_relative_url.replace("../", "")

    url 是基礎地址(All products | Books to Scrape - Sandbox)。 替換 ../ 為空字符串,得到完整路徑(如 http://books.toscrape.com/media/...)。

  3. 下載并保存圖片
    image_response = requests.get(image_absolute_url, stream=True)
    with open(filename, "wb") as f:for chunk in image_response.iter_content(1024):f.write(chunk)

    stream=True:以流式下載大文件,避免內存溢出。 iter_content(1024):每次下載 1024 字節的塊,適合大文件。

  4. 文件名處理
    title = book.h3.a["title"].strip().replace("/", "-")
    filename = f"book_covers/{title}.jpg"

    replace("/", "-"):替換書名中的非法字符(如斜杠),避免保存文件時報錯。

    運行結果

    已下載封面: A Light in the Attic 已下載封面: Tipping the Velvet 已下載封面: Soumission ... 所有封面圖片會保存在 book_covers 文件夾中,文件名格式為 書名.jpg。

擴展優化

處理分頁

爬取所有頁面的書籍封面(觀察分頁URL規律,如 page-2.html):

for page in range(1, 51):  # 共50頁url = f"http://books.toscrape.com/catalogue/page-{page}.html"# 發送請求并解析...

添加延遲避免封禁

在請求間添加隨機延遲,模擬人類操作:

import time
import random
time.sleep(random.uniform(0.5, 2.0))  # 隨機延遲0.5~2秒

錯誤重試機制

使用 try-except 捕獲下載失敗的圖片并重試:

try:image_response = requests.get(...)
except requests.exceptions.RequestException:print(f"下載失敗: {title}")continue  # 跳過當前,繼續下一個

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

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

相關文章

Octave3D 關卡設計插件

課程參考鏈接 這位大佬有在視頻合集中有詳細的講解&#xff0c;個人體驗過&#xff0c;感覺功能很強大 https://www.bilibili.com/video/BV1Kq4y1C72P/?share_sourcecopy_web&vd_source0a41d8122353e3e841ae0a39908c2181 Prefab資源管理 第一步 在場景中創建一個空物體…

【Transformer優化】Transformer的局限在哪?

自2017年Transformer橫空出世以來&#xff0c;它幾乎重寫了自然語言處理的規則。但當我們在享受其驚人的并行計算能力和表征能力時&#xff0c;是否真正理解了它的局限性&#xff1f;本文將深入探討在復雜度之外被忽視的五大核心缺陷&#xff0c;并試圖在數學維度揭示其本質。 …

SpringBoot(一)--搭建架構5種方法

目錄 一、?Idea從spring官網下載打開 2021版本idea 1.打開創建項目 2.修改pom.xml文件里的版本號 2017版本idea 二、從spring官網下載再用idea打開 三、Idea從阿里云的官網下載打開 ?編輯 四、Maven項目改造成springboot項目 五、從阿里云官網下載再用idea打開 Spri…

Python爬蟲實戰:一鍵采集電商數據,掌握市場動態!

電商數據分析是個香餑餑&#xff0c;可市面上的數據采集工具要不貴得嚇人&#xff0c;要不就是各種廣告彈窗。干脆自己動手寫個爬蟲&#xff0c;想抓啥抓啥&#xff0c;還能學點技術。今天咱聊聊怎么用Python寫個簡單的電商數據爬蟲。 打好基礎&#xff1a;搞定請求頭 別看爬蟲…

樂鑫打造全球首款 PSA Certified Level 2 RISC-V 芯片

樂鑫科技 (688018.SH) 榮幸宣布 ESP32-C6 于 2025 年 2 月 20 日獲得 PSA Certified Level 2 認證。這一重要突破使 ESP32-C6 成為全球首款基于 RISC-V 架構獲此認證的芯片&#xff0c;體現了樂鑫致力于為全球客戶提供安全可靠、性能卓越的物聯網解決方案的堅定承諾。 PSA 安全…

圖像滑塊對比功能的開發記錄

背景介紹 最近&#xff0c;公司需要開發一款在線圖像壓縮工具&#xff0c;其中的一個關鍵功能是讓用戶直觀地比較壓縮前后的圖像效果。因此&#xff0c;我們設計了一個對比組件&#xff0c;它允許用戶通過拖動滑塊&#xff0c;動態調整兩張圖像的顯示區域&#xff0c;從而清晰…

tcc編譯器教程2 編譯lua解釋器

本文主要介紹了使用tcc編譯器編譯lua解釋器源碼。 1 介紹 lua是一門編程語言,開源且源碼很容易編譯,我平時用來測試C語言編程環境時經常使用。一般能編譯成功就說明編程環境設置正常。下面用之前設置好的tcc編程環境進行測試。 2 獲取源碼 我一般有保留多個版本的lua源碼進…

Unity DOTS從入門到精通之 自定義Authoring類

文章目錄 前言安裝 DOTS 包什么是Authoring1. 實體組件2. Authoring類 前言 DOTS&#xff08;面向數據的技術堆棧&#xff09;是一套由 Unity 提供支持的技術&#xff0c;用于提供高性能游戲開發解決方案&#xff0c;特別適合需要處理大量數據的游戲&#xff0c;例如大型開放世…

comctl32!ListView_OnSetItem函數分析LISTSUBITEM結構中的image表示圖標位置

第一部分&#xff1a; BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …

【算法】大數據查重

大數據查重 哈希表 找出第一個出現重復的數字 || 找所有重復出現的數字 #include <iostream> #include <vector> #include <unordered_map> #include <unordered_set> #include <stdlib.h> #include <time.h> #include <string> …

模型微調-基于LLaMA-Factory進行微調的一個簡單案例

模型微調-基于LLaMA-Factory進行微調的一個簡單案例 1. 租用云計算資源2. 拉取 LLaMa-Factory3. 安裝依賴環境4. 啟動 LLaMa-Factory 界面5. 從 Huggingface 下載模型6. 模型驗證7. 模型微調 1. 租用云計算資源 以下示例基于 AutoDL 云計算資源。 在云計算平臺選擇可用的云計…

【單片機】ARM 處理器簡介

ARM 公司簡介 ARM&#xff08;Advanced RISC Machine&#xff09; 是英國 ARM 公司&#xff08;原 Acorn RISC Machine&#xff09; 開發的一種精簡指令集&#xff08;RISC&#xff09; 處理器架構。ARM 處理器因其低功耗、高性能、廣泛適用性&#xff0c;成為嵌入式系統、移動…

springboot的實體類字段校驗的分組校驗

分組校驗&#xff08;Group Validation&#xff09;允許在不同的場景下對同一個實體類應用不同的校驗規則。例如&#xff0c;在新增數據和更新數據時&#xff0c;可能需要對某些字段的校驗規則進行調整。以下是分組校驗的具體實現步驟&#xff1a; 一、定義分組接口 創建空的標…

vue3,Element Plus中隱藏樹el-tree滾動條

el-tree&#xff0c;節點過多&#xff0c;默認會出現垂直滾動條&#xff0c;顯得不美觀 可以使用隱藏組件 el-scrollbar 將 el-tree 包裹&#xff0c;就可以隱藏垂直滾動條 <el-scrollbar> <el-tree> ... </el-tree> </el-scrollbar> /* 滾動條禁用鼠…

mysql練習

創建數據庫db_ck&#xff0c;再創建表t_hero&#xff0c;將四大名著中的主要人物都插入這個表中&#xff0c;將實現過程中sql提交上上來 1、創建數據庫db_ck mysql> create database db_ck; 2、創建表t_hero mysql> use db_ck Database changed mysql> create table …

svn刪除所有隱藏.svn文件,文件夾脫離svn控制

新建一個文件&#xff0c;取名remove-svn-folders.reg&#xff0c;輸入如下內容&#xff1a; Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN] "Delete SVN Folders" [HKEY_LOCAL_MACHINE\SOFTWARE\Class…

文心一言:中國大模型時代的破局者與探路者

2023年&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;的浪潮席卷全球&#xff0c;而百度推出的“文心一言”&#xff08;ERNIE Bot&#xff09;作為中國AI領域的代表性產品&#xff0c;迅速成為行業焦點。這款基于百度自主研發的“文心大模型”打造的對話式AI工具&am…

Ubuntu 安裝docker docker-compose

Docker 通過提供輕量級、可移植且高效的解決方案&#xff0c;簡化了軟件開發和部署。“docker build”命令是 Docker 鏡像創建過程的核心。本文將探討 Docker 構建命令、用法以及 Docker 構建的優化。 Docker 構建有什么作用&#xff1f; Docker build 是一個命令行界面 CLI命…

Unity開發——CanvasGroup組件介紹和應用

CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染順序的組件。 一、常用屬性的解釋 1、alpha&#xff1a;控制UI的透明度 類型&#xff1a;float&#xff0c;0.0 ~1.0&#xff0c; 其中 0.0 完全透明&#xff0c;1.0 完全不透明。 通過調整alpha值可以實現UI的淡入淡…

每天五分鐘深度學習PyTorch:向更深的卷積神經網絡挑戰的ResNet

本文重點 ResNet大名鼎鼎,它是由何愷明團隊設計的,它獲取了2015年ImageNet冠軍,它很好的解決了當神經網絡層數過多出現的難以訓練的問題,它創造性的設計了跳躍連接的方式,使得卷積神經網絡的層數出現了大幅度提升,設置可以達到上千層,可以說resnet對于網絡模型的設計具…