Python實戰:海量獲取京東商品信息

在數據驅動的商業時代,數據就是最寶貴的資源。對于電商從業者、市場分析師而言,從京東這類大型電商平臺獲取商品信息,能夠為市場調研、競品分析、銷售策略制定提供重要依據。今天,就來分享如何用Python實現京東商品信息的海量獲取。

?

一、準備工作

(一)環境搭建

首先,確保你的電腦安裝了Python 3.x版本。Python 3在語法簡潔性、性能優化以及對新特性的支持上更勝一籌。安裝完成后,還要為Python配置好環境變量,讓系統能夠順利識別Python命令。

接下來是安裝第三方庫,這是實現爬蟲功能的關鍵。通過pip命令,可以輕松安裝所需的庫:

?

- ?requests?:用于發送HTTP請求,與京東服務器進行通信,獲取網頁內容。

- ?BeautifulSoup?:負責解析HTML頁面,將雜亂的網頁代碼轉化為結構化的數據,方便我們提取所需信息。

- ?pandas?:強大的數據處理和分析庫,能將爬取到的數據整理成規范的表格形式,便于后續分析和存儲。

- ?time?:控制請求間隔時間,避免因請求過于頻繁而觸發京東的反爬機制。

- ?random?:生成隨機數,結合?time?庫,實現更靈活的請求間隔設置,讓爬蟲行為更接近真實用戶。

安裝命令如下:

?

pip install requests beautifulsoup4 pandas time random

?

?

(二)分析網頁結構

?

在編寫代碼前,要深入了解京東商品頁面的結構。打開京東網站,輸入目標商品關鍵詞,比如“筆記本電腦”,進入商品搜索結果頁面。按下F12鍵,調出瀏覽器的開發者工具,通過“Elements”選項卡,查看頁面的HTML代碼。

仔細觀察可以發現,商品的名稱、價格、銷量、評價等信息都包含在特定的HTML標簽和類名中。例如,商品名稱可能在?<div class="p-name">?標簽內,價格在?<div class="p-price">?標簽內。掌握這些標簽和類名的規律,是精準提取商品信息的基礎。

?

(三)構造請求頭

?

京東作為大型電商平臺,有著嚴格的反爬機制。為了讓爬蟲順利獲取數據,需要構造合理的請求頭,偽裝成真實用戶的訪問行為。請求頭中,?User - Agent?字段尤為重要,它標識了訪問客戶端的信息,包括瀏覽器類型、版本、操作系統等。我們可以在網上搜索常見的?User - Agent?,然后隨機選擇一個進行設置,模擬不同用戶的訪問:

?

import random

?

user_agents = [

? ? "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",

? ? "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",

? ? # 更多User - Agent

]

?

headers = {

? ? "User - Agent": random.choice(user_agents)

}

?

?

二、代碼實現

?

(一)發送請求獲取頁面內容

?

使用?requests?庫向京東商品頁面發送GET請求,獲取網頁的HTML內容:

?

import requests

?

url = "https://search.jd.com/Search?keyword=筆記本電腦" # 可替換為其他商品關鍵詞

response = requests.get(url, headers=headers)

if response.status_code == 200:

? ? html_content = response.text

else:

? ? print(f"請求失敗,狀態碼:{response.status_code}")

?

?

這里,?requests.get()?方法發送請求,?headers?參數傳遞構造好的請求頭。如果請求成功,狀態碼為200,將網頁內容存儲在?html_content?變量中;否則,打印出錯誤狀態碼。

?

(二)解析頁面提取商品信息

?

借助?BeautifulSoup?庫解析HTML內容,提取商品信息:

?

from bs4 import BeautifulSoup

?

soup = BeautifulSoup(html_content, 'html.parser')

products = soup.find_all('div', class_='gl-i-wrap') # 假設商品信息所在的div類名為gl-i-wrap

data = []

for product in products:

? ? name = product.find('div', class_='p-name').find('em').text.strip()

? ? price = product.find('div', class_='p-price').find('i').text.strip()

? ? # 嘗試獲取銷量信息,若無則設為None

? ? sales = product.find('div', class_='p-commit').find('strong')

? ? if sales:

? ? ? ? sales = sales.text.strip()

? ? else:

? ? ? ? sales = None

? ? data.append({

? ? ? ? '商品名稱': name,

? ? ? ? '商品價格': price,

? ? ? ? '商品銷量': sales

? ? })

?

?

這段代碼中,?BeautifulSoup(html_content, 'html.parser')?創建解析對象,?find_all()?方法查找所有包含商品信息的?<div>?標簽。然后,通過層層查找子標簽,提取商品名稱、價格和銷量信息,并存儲在?data?列表中。

?

(三)數據存儲

?

利用?pandas?庫將提取到的數據整理成表格形式,并保存為CSV文件:

?

import pandas as pd

?

df = pd.DataFrame(data)

df.to_csv('jd_products.csv', index=False, encoding='utf-8-sig')

?

?

?pd.DataFrame(data)?將列表數據轉換為DataFrame表格,?to_csv()?方法將表格保存為CSV文件,?index=False?表示不保存行索引,?encoding='utf-8-sig'?確保文件編碼正確,避免中文亂碼問題。

?

三、進階與優化

?

(一)分頁爬取

?

京東商品搜索結果通常有多頁,要獲取海量數據,就需要實現分頁爬取。通過分析URL規律可以發現,頁碼參數一般在URL中以?page?表示。例如,第一頁的URL可能是?https://search.jd.com/Search?keyword=筆記本電腦&page=1?,第二頁是?https://search.jd.com/Search?keyword=筆記本電腦&page=2?,以此類推。

利用這個規律,通過循環改變?page?參數的值,實現多頁數據的獲取:

?

for page in range(1, 11): # 假設獲取前10頁數據

? ? url = f"https://search.jd.com/Search?keyword=筆記本電腦&page={page}"

? ? response = requests.get(url, headers=headers)

? ? if response.status_code == 200:

? ? ? ? html_content = response.text

? ? ? ? # 解析頁面提取商品信息的代碼...

? ? else:

? ? ? ? print(f"第{page}頁請求失敗,狀態碼:{response.status_code}")

? ? time.sleep(random.uniform(1, 3)) # 設置隨機請求間隔,避免反爬

?

?

(二)應對反爬機制

?

除了設置請求頭和請求間隔,還可以使用代理IP進一步繞過反爬。代理IP就像是一個中間人,爬蟲通過它向京東服務器發送請求,隱藏真實IP地址,降低被封禁的風險。可以從一些免費或付費的代理IP服務提供商獲取代理IP列表,然后在代碼中隨機選擇使用:

?

proxies = [

? ? {"http": "http://111.111.111.111:8080"},

? ? {"http": "http://222.222.222.222:8080"},

? ? # 更多代理IP

]

?

proxy = random.choice(proxies)

response = requests.get(url, headers=headers, proxies=proxy)

?

?

(三)異常處理

?

在爬取過程中,可能會遇到各種異常情況,如網絡波動導致請求超時、頁面結構變化導致元素無法提取等。為了提高爬蟲的穩定性和可靠性,需要添加異常處理機制:

?

try:

? ? response = requests.get(url, headers=headers, proxies=proxy, timeout=5)

? ? response.raise_for_status() # 檢查請求是否成功,不成功則拋出異常

? ? html_content = response.text

? ? # 解析頁面提取商品信息的代碼...

except requests.exceptions.RequestException as e:

? ? print(f"請求發生異常:{e}")

except Exception as e:

? ? print(f"其他異常:{e}")

?

?

四、法律與道德考量

在進行網頁爬取時,必須遵守相關法律法規和網站的使用條款。京東的?robots.txt?文件規定了哪些頁面可以被爬取,哪些不可以,一定要嚴格遵守,避免侵權和法律風險。同時,爬取數據應僅用于合法的商業分析、學術研究等正當目的,不得用于非法競爭、數據販賣等不當行為。

?

通過以上步驟和技巧,你已經掌握了使用Python獲取京東商品信息的方法。在實際應用中,可以根據具體需求,進一步優化和擴展代碼,讓數據更好地為業務服務,創造更大的價值。

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

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

相關文章

聊一聊常見的超時問題:timeout

大家好&#xff0c;我是G探險者&#xff01; 在日常開發中&#xff0c;“超時&#xff08;Timeout&#xff09;”類錯誤是開發者們經常遇到的問題。無論是調用第三方服務、訪問數據庫&#xff0c;還是并發任務處理&#xff0c;都可能因超時而導致請求失敗或系統異常。 本文將系…

創建型模式:工廠方法(Factory Method)模式

一、簡介 工廠方法(Factory Method)模式是一種創建型設計模式,它定義了一個創建對象的接口,但讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。在 C# 中,工廠方法模式提供了一種更靈活的對象創建方式,將對象的創建和使用分離,提高了代碼的可維護性和…

外網訪問內網海康威視監控視頻的方案:WebRTC + Coturn 搭建

外網訪問內網海康威視監控視頻的方案&#xff1a;WebRTC Coturn 需求背景 在倉庫中有海康威視的監控攝像頭&#xff0c;內網中是可以直接訪問到監控攝像的畫面&#xff0c;由于項目的需求&#xff0c;需要在外網中也能看到監控畫面。 實現這個功能的意義在于遠程操控設備的…

Redis 8.0正式發布,再次開源為哪般?

Redis 8.0 已經于 2025 年 5 月 1 日正式發布&#xff0c;除了一些新功能和性能改進之外&#xff0c;一個非常重要的改變就是新增了開源的 AGPLv3 協議支持&#xff0c;再次回歸開源社區。 為什么說再次呢&#xff1f;這個需要從 2024 年 3 月份 Redis 7.4 說起&#xff0c;因為…

382_C++_在用戶會話結束時,檢查是否有其他會話仍然來自同一個客戶端 IP 地址,沒有連接狀態設置為斷開,否則為連接

之前出現的問題:重啟管理機,工作機上面熱備連接狀態顯示未連接 (此時是有一個工作機連接管理機的),所以正常應該是連接狀態解決:根因分析: 重啟管理機后,管理機給過來的cookie是空的,導致工作機同時存在兩個管理機的session,在其中一個超時后,調用回調函數通知會話斷開…

大模型系列(五)--- GPT3: Language Models are Few-Shot Learners

論文鏈接&#xff1a; Language Models are Few-Shot Learners 點評&#xff1a; GPT3把參數規模擴大到1750億&#xff0c;且在少樣本場景下性能優異。對于所有任務&#xff0c;GPT-3均未進行任何梯度更新或微調&#xff0c;僅通過純文本交互形式接收任務描述和少量示例。然而&…

【網絡分析工具】網絡工具wireshark、TCPdump、iperf使用詳解

這里寫目錄標題 1. wireshark1.1. 過濾包1.2. 常見分析 2. tcpdump3. iperf 1. wireshark **ip.dst eq 10.0.0.21** 是用于網絡流量分析工具&#xff08;例如 Wireshark 或 tcpdump&#xff09;的過濾器表達式。 它的作用是篩選出所有目標IP地址為 10.0.0.21 的數據包 IP.add…

Django rest_framework 信號機制生成并使用token

1、在setting.py 中增加設置 DEFAULT_AUTHENTICATION_CLASSES:[rest_framework.authentication.BasicAuthentication,#基本的用戶名密碼驗證rest_framework.authentication.SessionAuthentication,rest_framework.authentication.TokenAuthentication,# token 認證], INSTALLE…

SQL Server To Paimon Demo by Flink standalone cluster mode

需求&#xff1a;使用 Flink CDC 測試 SQL Server 連接 Paimon 操作&#xff1a;啟動 Flink standalone cluster 后&#xff0c;接著啟動 Flink SQL Client&#xff0c;則通過 Flink SQL Client 提交 insert & select job 到該 8081 cluster Flink SQL Client 執行案例 -…

MySQL 從入門到精通(四):備份與恢復實戰——從邏輯到物理,增量備份全解析

數據是企業的核心資產&#xff0c;而數據庫作為數據存儲的 “心臟”&#xff0c;其備份與恢復策略直接關系到業務的連續性。本文將結合 MySQL 的日志體系與備份工具&#xff0c;深入講解邏輯備份、物理備份、增量備份的實戰操作&#xff0c;幫助你構建可靠的數據庫保護方案。 目…

鴻蒙編譯boost整合linux跨平臺應用

openharmony deveco 4.1支持armeabi-v7a deveco 5.0后不支持arm32位系統 boost編譯 使用deveco的寫cmake集成boost boost使用1.88的最新版本&#xff0c;帶cmake工具鏈 https://github.com/boostorg/boost.git boost的源碼都在sub_module中 deveco 4.1的版本sdk最高到9&am…

機器視覺的平板電腦屏幕組件覆膜應用

在現代智能制造業中&#xff0c;平板電腦屏幕組件覆膜工序是確保產品外觀和功能完整性的重要環節。隨著技術的進步&#xff0c;傳統的覆膜方式已經無法滿足高速度、高精度的生產需求。而MasterAlign視覺系統的出現&#xff0c;將傳統覆膜工藝轉變為智能化、自動化的生產流程。在…

android-ndk開發(10): use of undeclared identifier ‘pthread_getname_np‘

1. 報錯描述 使用 pthread 獲取線程名字&#xff0c; 用到 pthread_getname_np 函數。 交叉編譯到 Android NDK 時鏈接報錯 test_pthread.cpp:19:5: error: use of undeclared identifier pthread_getname_np19 | pthread_getname_np(thread_id, thread_name, sizeof(thr…

【前端基礎】6、CSS的文本屬性(text相關)

目錄內容 text-decoration&#xff1a;設置文本裝飾線text-transform&#xff1a;文本中文字的大小寫轉換text-indent&#xff1a;首行縮進text-align&#xff1a;設置文本對齊方式 一、text-decoration&#xff1a;設置文本裝飾線 常見值&#xff1a; None&#xff1a;沒有…

【Ansible】模塊詳解

一、ansible概述 1.1 ansible介紹 Ansible 是一個基于 Python 開發的配置管理和應用部署工具&#xff0c;近年來在自動化管理領域表現突出。它集成了許多傳統運維工具的優點&#xff0c;幾乎可以實現 Pubbet 和 Saltstack 所具備的功能。 1.2 ansible能做什么 批量處理。An…

Git實戰經驗分享:深入掌握git commit --amend的進階技巧

一、工具簡介 git commit --amend是Git版本控制系統的核心補救命令&#xff0c;主要用于修正最近一次提交的元數據。該命令不會產生新的提交記錄&#xff0c;而是通過覆蓋原提交實現版本歷史的整潔性&#xff0c;特別適合在本地倉庫進行提交優化。 二、核心應用場景 提交信息…

軟考 系統架構設計師系列知識點之雜項集萃(56)

接前一篇文章&#xff1a;軟考 系統架構設計師系列知識點之雜項集萃&#xff08;55&#xff09; 第91題 商業智能關注如何從業務數據中提取有用的信息&#xff0c;然后采用這些信息指導企業的業務開展。商業智能系統主要包括數據預處理、建立&#xff08;&#xff09;、數據分…

Spark任務調度流程詳解

1. 核心調度組件 DAGScheduler&#xff1a;負責將Job拆分為Stage&#xff0c;處理Stage間的依賴關系。 TaskScheduler&#xff1a;將Task分配到Executor&#xff0c;監控任務執行。 SchedulerBackend&#xff1a;與集群管理器&#xff08;如YARN、K8s&#xff09;通信&#x…

第04章—技術突擊篇:如何根據求職意向進行快速提升與復盤

經過上一講的內容闡述后&#xff0c;咱們定好了一個與自身最匹配的期望薪資&#xff0c;接著又該如何準備呢&#xff1f; 很多人在準備時&#xff0c;通常會選擇背面試八股文&#xff0c;這種做法效率的確很高&#xff0c;畢竟能在“八股文”上出現的題&#xff0c;也絕對是面…

Go語言的逃逸分析是怎么進行的

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 非常期待和您一起在這個小…