使用 requests 和 BeautifulSoup 解析淘寶商品

以下將詳細解釋如何通過這兩個庫來實現按關鍵字搜索并解析淘寶商品信息。

一、準備工作

1. 安裝必要的庫

在開始之前,確保已經安裝了 requestsBeautifulSoup 庫。如果尚未安裝,可以通過以下命令進行安裝:

bash

pip install requests
pip install beautifulsoup4
2. 了解目標網頁的結構

在編寫爬蟲代碼之前,需要先了解淘寶搜索結果頁面的 HTML 結構。可以通過瀏覽器的開發者工具(按 F12 打開)來查看頁面的 HTML 源碼。

例如,當你在淘寶搜索框中輸入關鍵字并點擊搜索后,頁面會加載出一系列商品信息。這些商品信息通常被包裹在某些特定的 HTML 標簽和類名中。

二、編寫爬蟲代碼

以下是使用 requestsBeautifulSoup 解析淘寶商品信息的詳細步驟和代碼示例。

1. 發起請求

使用 requests 庫向淘寶搜索頁面發起請求,并獲取頁面的 HTML 內容。

Python

import requestsdef get_page(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textelse:print(f"請求失敗,狀態碼:{response.status_code}")return None
2. 解析 HTML

使用 BeautifulSoup 解析獲取到的 HTML 內容,并提取商品信息。

Python

from bs4 import BeautifulSoupdef parse_product_details(html):soup = BeautifulSoup(html, 'html.parser')# 淘寶商品信息通常被包裹在 <div class="m-itemlist"> 中products = soup.select(".m-itemlist .items .item")for product in products:try:# 提取商品名稱title = product.select_one(".title").get_text(strip=True)# 提取商品價格price = product.select_one(".price").get_text(strip=True)# 提取店鋪名稱shop = product.select_one(".shop").get_text(strip=True)# 提取商品鏈接link = product.select_one("a").get('href')print(f"商品名稱: {title}")print(f"商品價格: {price}")print(f"店鋪名稱: {shop}")print(f"商品鏈接: https:{link}")print("------------------------")except Exception as e:print(f"解析錯誤:{e}")
3. 搜索商品

將上述兩個函數組合起來,實現按關鍵字搜索并解析商品信息的功能。

Python

def search_products(keyword):# 構造搜索 URLurl = f"https://s.taobao.com/search?q={keyword}"html = get_page(url)if html:parse_product_details(html)if __name__ == "__main__":keyword = input("請輸入搜索關鍵字:")search_products(keyword)

三、代碼解釋

1.?get_page?函數
  • 使用 requests.get() 方法向目標 URL 發起請求。

  • 設置了 User-Agent 和其他請求頭,以模擬瀏覽器行為,避免被淘寶識別為爬蟲。

  • 檢查響應的狀態碼,確保請求成功。

2.?parse_product_details?函數
  • 使用 BeautifulSoup 解析 HTML 內容。

  • 使用 soup.select() 方法選擇頁面中的商品列表。這里假設商品信息被包裹在 <div class="m-itemlist"> 中。

  • 遍歷每個商品項,提取商品名稱、價格、店鋪名稱和鏈接等信息。

  • 使用 get_text(strip=True) 方法獲取文本內容,并去除多余的空白字符。

  • 使用 get('href') 方法獲取商品鏈接。

3.?search_products?函數
  • 構造搜索 URL,將關鍵字拼接到 URL 中。

  • 調用 get_page 函數獲取頁面 HTML。

  • 調用 parse_product_details 函數解析商品信息。

四、注意事項

  1. 反爬機制

    • 淘寶可能會對爬蟲進行限制,例如限制 IP 訪問頻率、檢測異常請求等。如果遇到這種情況,可以嘗試以下方法:

      • 使用代理服務器(如代理 IP 池)。

      • 增加請求間隔時間(使用 time.sleep())。

      • 模擬更多瀏覽器行為(如設置更多請求頭)。

  2. 動態加載內容

    • 淘寶的部分內容可能是通過 JavaScript 動態加載的。如果發現 requests 獲取到的 HTML 內容中缺少某些數據,可以考慮使用 selenium 來模擬瀏覽器操作。

  3. 數據存儲

    • 如果需要將爬取到的數據存儲起來,可以將其保存到文件(如 CSV、JSON)或數據庫中。

五、示例輸出

假設搜索關鍵字為 "iPhone 13",運行程序后可能輸出如下:

請輸入搜索關鍵字:iPhone 13
商品名稱: iPhone 13
商品價格: ¥5499.00
店鋪名稱: 蘋果官方旗艦店
商品鏈接: https://detail.tmall.com/item.htm?id=1234567890
------------------------
商品名稱: iPhone 13 Pro
商品價格: ¥7999.00
店鋪名稱: 蘋果官方旗艦店
商品鏈接: https://detail.tmall.com/item.htm?id=9876543210
------------------------
...

通過上述步驟和代碼,你可以使用 requestsBeautifulSoup 實現按關鍵字搜索并解析淘寶商品信息的功能。希望這個示例對你有所幫助!

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

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

相關文章

C#調用ACCESS數據庫,解決“Microsoft.ACE.OLEDB.12.0”未注冊問題

C#調用ACCESS數據庫&#xff0c;解決“Microsoft.ACE.OLEDB.12.0”未注冊問題 解決方法&#xff1a; 1.將C#采用的平臺從AnyCpu改成X64 2.將官網下載的“Microsoft Access 2010 數據庫引擎可再發行程序包AccessDatabaseEngine_X64”文件解壓 3.安裝解壓后的文件 點擊下載安…

【文獻閱讀】Vision-Language Models for Vision Tasks: A Survey

發表于2024年2月 TPAMI 摘要 大多數視覺識別研究在深度神經網絡&#xff08;DNN&#xff09;訓練中嚴重依賴標注數據&#xff0c;并且通常為每個單一視覺識別任務訓練一個DNN&#xff0c;這導致了一種費力且耗時的視覺識別范式。為應對這兩個挑戰&#xff0c;視覺語言模型&am…

【Kubernetes】StorageClass 的作用是什么?如何實現動態存儲供應?

StorageClass 使得用戶能夠根據不同的存儲需求動態地申請和管理存儲資源。 StorageClass 定義了如何創建存儲資源&#xff0c;并指定了存儲供應的配置&#xff0c;例如存儲類型、質量、訪問模式等。為動態存儲供應提供了基礎&#xff0c;使得 Kubernetes 可以在用戶創建 PVC 時…

Muduo網絡庫介紹

1.Reactor介紹 1.回調函數 **回調&#xff08;Callback&#xff09;**是一種編程技術&#xff0c;允許將一個函數作為參數傳遞給另一個函數&#xff0c;并在適當的時候調用該函數 1.工作原理 定義回調函數 注冊回調函數 觸發回調 2.優點 異步編程 回調函數允許在事件發生時…

Debian編譯安裝mysql8.0.41源碼包 筆記250401

Debian編譯安裝mysql8.0.41源碼包 以下是在Debian系統上通過編譯源碼安裝MySQL 8.0.41的完整步驟&#xff0c;包含依賴管理、編譯參數優化和常見問題處理&#xff1a; 準備工作 1. 安裝編譯依賴 sudo apt update sudo apt install -y \cmake gcc g make libssl-dev …

Git常用問題收集

gitignore 忽略文件夾 不生效 有時候我們接手別人的項目時&#xff0c;發現有的忽略不對想要修改&#xff0c;但發現修改忽略.gitignore后無效。原因是如果某些文件已經被納入版本管理在.gitignore中忽略路徑是不起作用的&#xff0c;這時候需要先清除本地緩存&#xff0c;然后…

編程哲學——TCP可靠傳輸

TCP TCP可靠傳輸 TCP的可靠傳輸表現在 &#xff08;1&#xff09;建立連接時三次握手&#xff0c;四次揮手 有點像是這樣對話&#xff1a; ”我們開始對話吧“ ”收到“ ”好的&#xff0c;我收到你收到了“ &#xff08;2&#xff09;數據傳輸時ACK應答和超時重傳 ”我們去吃…

【MediaPlayer】基于libvlc+awtk的媒體播放器

基于libvlcawtk的媒體播放器 libvlc下載地址 awtk下載地址 代碼實現libvlc相關邏輯接口UI媒體接口實例化媒體播放器注意事項 libvlc 下載地址 可以到https://download.videolan.org/pub/videolan/vlc/去下載一個vlc版本&#xff0c;下載后其實是vlc的windows客戶端&#xff0…

pulsar中的延遲隊列使用詳解

Apache Pulsar的延遲隊列支持任意時間精度的延遲消息投遞&#xff0c;適用于金融交易、定時提醒等高時效性場景。其核心設計通過堆外內存索引隊列與持久化分片存儲實現&#xff0c;兼顧靈活性與可擴展性。以下從實現原理、使用方式、優化策略及挑戰展開解析&#xff1a; 一、核…

單鏈表的實現 | 附學生信息管理系統的實現

目錄 1.前言&#xff1a; 2.單鏈表的相關概念&#xff1a; 2.1定義&#xff1a; 2.2形式&#xff1a; 2.3特點&#xff1a; 3.常見功能及代碼 &#xff1a; 3.1創建節點&#xff1a; 3.2頭插&#xff1a; 3.3尾插&#xff1a; 3.4頭刪&#xff1a; 3.5尾刪&#xff1a; 3.6插入…

java實用工具類Localstorage

public class LocalStorageUtil {//提供ThreadLocal對象,private static ThreadLocal threadLocalnew ThreadLocal();public static Object get(){return threadLocal.get();}public static void set(Object o){threadLocal.set(o);}public static void remove(){threadLocal.r…

LLM-大語言模型淺談

目錄 核心定義 典型代表 核心原理 用途 優勢與局限 未來發展方向 LLM&#xff08;Large Language Model&#xff09;大語言模型&#xff0c;指通過海量文本數據訓練 能夠理解和生成人類語言的深度學習模型。 核心定義 一種基于深度神經網絡&#xff08;如Transformer架…

【小兔鮮】day03 Home模塊與一級分類

【小兔鮮】day03 Home模塊與一級分類 1. Home-整體結構搭建和分類實現1.1 頁面結構 2. Home-banner輪播圖功能實現 1. Home-整體結構搭建和分類實現 1.1 頁面結構 分類實現 2. Home-banner輪播圖功能實現 輪播圖實現 在HomeBanner.vue中寫出輪播圖的結構 在apis目錄下新建h…

C++中的多態和模板

#include <iostream> #include <cstdlib> #include <ctime> #include <string>using namespace std;// 武器基類 class Weapon { public:virtual ~Weapon() {}virtual string getName() const 0; // 獲取武器名稱virtual int getAtk() const 0; …

Spring 概念

Spring 是一個功能強大、靈活且廣泛使用的 Java 企業級開發框架&#xff0c;它誕生于 2003 年&#xff0c;由 Rod Johnson 創建&#xff0c;初衷是簡化 Java EE 的開發過程。 一、Spring 是什么&#xff1f; 簡單來說&#xff1a; Spring 是一個輕量級的 Java 開發框架&#…

神經網絡之損失函數

引言&#xff1a;損失函數 &#xff08;Loss Function&#xff09;是機器學習和深度學習中非常重要的一個概念。用于衡量模型的預測值與真實值之間的差異&#xff0c;從而指導模型優化其參數以最小化這種差異。 一、損失函數作用 量化誤差&#xff1a;損失函數是將預測值和真實…

Java 基礎-32-枚舉-枚舉的應用場景

在Java編程中&#xff0c;枚舉&#xff08;Enum&#xff09;提供了一種強大的方式來定義一組固定的常量。它們不僅限于簡單的用途&#xff0c;還可以包含構造函數、方法和字段等高級功能&#xff0c;使其適用于多種不同的應用場景。本文將探討幾種常見的使用枚舉的場景&#xf…

【網絡安全】安全的網絡設計

網絡設計是網絡安全的基礎&#xff0c;一個好的網絡設計可以有效的防止攻擊者的入侵。在本篇文章中&#xff0c;我們將詳細介紹如何設計一個安全的網絡&#xff0c;包括網絡架構&#xff0c;網絡設備&#xff0c;網絡策略&#xff0c;以及如何處理網絡安全事件。 一、網絡架構…

網絡安全-等級保護(等保) 0. 前言

各位伙伴好&#xff1a; 招投標總結已過去一年了&#xff0c;時間飛逝&#xff0c;一直忙于工作&#xff0c;等保相關的內容斷斷續續整理了近半年的時間&#xff0c;但一直無暇完成博客內容。 等保已經是一個成熟的體系&#xff0c;現在已進入等保2.0時代&#xff0c;相關政策…

TLS協議詳解

TLS協議 一&#xff0c;TLS協議的組成 TLS協議架構模塊分為兩層&#xff1a;TLS記錄協議&#xff0c;TLS握手協議 ① TLS記錄協議&#xff1a; 是所有子協議的基層&#xff0c;規定了TLS收發數據的基本單位。所有子協議都需要通過記錄協議發出&#xff0c;多個記錄數據可以在…