一、實現思路分析
URL 構造:京東搜索 URL 格式為 https://search.jd.com/Search?keyword=關鍵詞&page=頁碼(page 為奇數,如 1、3、5 對應第 1、2、3 頁)。
反爬處理:模擬瀏覽器請求(設置 User-Agent、Cookie)、控制請求頻率(添加延遲)。
頁面解析:京東商品列表的核心信息(標題、價格、鏈接、店鋪)嵌在 HTML 中,用 BeautifulSoup 解析。
數據保存:將爬取的信息保存為 CSV 文件,方便后續查看。
二、實戰代碼實現
1. 安裝依賴庫
首先在終端執行以下命令安裝所需庫:
bash
運行
pip install requests beautifulsoup4 fake-useragent pandas
2. 完整爬蟲代碼
運行
import requests from bs4 import BeautifulSoup import time import random from fake_useragent import UserAgent import pandas as pd class JdSpider: def __init__(self, keyword, page_num=3): # 初始化參數 self.keyword = keyword # 搜索關鍵詞 self.page_num = page_num # 要爬取的頁數 self.headers = self._get_headers() # 請求頭 self.data_list = [] # 存儲爬取的商品數據 def _get_headers(self): """構造請求頭,模擬瀏覽器訪問""" # 注意:Cookie需要替換成你自己的(從瀏覽器開發者工具中復制) cookie = "你的京東Cookie" # 替換成真實Cookie!!! ua = UserAgent() headers = { "User-Agent": ua.random, # 隨機生成User-Agent "Cookie": cookie, "Referer": "https://www.jd.com/", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive" } return headers def _get_page_url(self, page): """構造指定頁碼的搜索URL""" # 京東的page參數:第1頁=1,第2頁=3,第3頁=5,以此類推 jd_page = page * 2 - 1 url = f"https://search.jd.com/Search?keyword={self.keyword}&page={jd_page}&enc=utf8" return url def _parse_page(self, html): """解析頁面,提取商品信息""" soup = BeautifulSoup(html, "html.parser") # 找到所有商品項 items = soup.find_all("li", class_="gl-item") for item in items: try: # 1. 商品價格 price_elem = item.find("div", class_="p-price") price = price_elem.find("i").text if price_elem else "無價格" # 2. 商品標題 title_elem = item.find("div", class_="p-name p-name-type-2") title = title_elem.find("em").text.strip() if title_elem else "無標題" # 3. 商品鏈接 link_elem = item.find("a", class_="J_ClickStat") link = "https:" + link_elem["href"] if link_elem else "無鏈接" # 4. 店鋪名稱 shop_elem = item.find("div", class_="p-shop") shop = shop_elem.find("a").text.strip() if shop_elem else "無店鋪" # 存儲數據 self.data_list.append({ "標題": title, "價格": price, "鏈接": link, "店鋪": shop }) except Exception as e: print(f"解析單個商品失敗:{e}") continue def run(self): """爬蟲主邏輯""" print(f"開始爬取京東關鍵詞【{self.keyword}】的商品信息,共{self.page_num}頁...") for page in range(1, self.page_num + 1): try: # 1. 構造URL url = self._get_page_url(page) # 2. 發送請求 response = requests.get(url, headers=self.headers, timeout=10) response.encoding = "utf-8" # 設置編碼 # 3. 解析頁面 self._parse_page(response.text) # 4. 打印進度 print(f"第{page}頁爬取完成,已獲取{len(self.data_list)}條商品數據") # 5. 隨機延遲(2-5秒),避免高頻請求被封 time.sleep(random.randint(2, 5)) except Exception as e: print(f"第{page}頁爬取失敗:{e}") continue # 保存數據到CSV if self.data_list: df = pd.DataFrame(self.data_list) df.to_csv(f"京東_{self.keyword}_商品列表.csv", index=False, encoding="utf-8-sig") print(f"數據保存完成!文件名為:京東_{self.keyword}_商品列表.csv") else: print("未爬取到任何商品數據!") if __name__ == "__main__": # 示例:爬取關鍵詞"Python編程"的前3頁商品 spider = JdSpider(keyword="Python編程", page_num=3) spider.run()
三、關鍵部分解釋
Cookie 獲取方法:
打開瀏覽器訪問京東(登錄后),按 F12 打開開發者工具 → 切換到 Network 標簽 → 刷新搜索頁面 → 找到第一個請求(Search?keyword=...)→ 在 Request Headers 中復制 Cookie 值,替換代碼中的你的京東Cookie。
請求頭構造:
使用fake-useragent隨機生成 User-Agent,避免固定 UA 被識別為爬蟲;
添加 Referer、Cookie 等字段,模擬真實用戶的請求特征。
頁面解析邏輯:
通過BeautifulSoup定位商品項(li.gl-item),再分別提取價格(div.p-price)、標題(div.p-name)、鏈接(a.J_ClickStat)、店鋪(div.p-shop);
加入異常處理,避免單個商品解析失敗導致整個頁面爬取中斷。
反爬措施:
隨機延遲(2-5 秒):避免短時間內發送大量請求;
模擬瀏覽器請求頭:降低被反爬機制識別的概率;
分頁爬取:控制爬取頁數,避免一次性爬取過多數據。
四、測試與注意事項
運行代碼:替換 Cookie 后,直接運行代碼,會在當前目錄生成 CSV 文件,包含商品標題、價格、鏈接、店鋪信息。
重要注意事項:
京東的反爬機制會更新,若 HTML 結構變化,需重新檢查元素調整解析規則;
不要爬取過多數據 / 過快,否則可能被封 IP 或賬號;
該爬蟲僅用于學習,請勿用于商業用途,遵守京東的 robots 協議。
總結
京東商品列表爬蟲的核心是構造正確的 URL + 模擬瀏覽器請求(Cookie/UA) + 解析 HTML 提取數據;
反爬的關鍵是控制請求頻率、偽裝請求特征,避免被京東的反爬系統識別;
數據解析時需加入異常處理,保證爬蟲的穩定性,最后將數據保存為 CSV 方便后續使用。
審核編輯 黃宇
-
API
+關注
關注
2文章
2371瀏覽量
66772 -
python
+關注
關注
57文章
4876瀏覽量
90032 -
京東
+關注
關注
2文章
1108瀏覽量
50077
發布評論請先 登錄
從踩坑到高效落地:關鍵詞搜索淘寶天貓商品列表 API 的實操心得
關鍵詞搜索京東列表 API 技術對接指南
野莓平臺關鍵詞商品搜索API接口使用指南
京東關鍵詞的應用
接入京東關鍵詞API的核心利弊分析
使用京東關鍵詞搜索接口獲取商品數據的實操指南
京東關鍵詞API接口獲取
京東關鍵詞 API 場景的需求梳理模板
京東關鍵詞的應用場景
京東關鍵詞搜索接口獲取商品數據的實操指南
京東關鍵詞API賦能
京東關鍵詞item_search-按關鍵字搜索京東商品
搜索關鍵詞獲取商品詳情接口的設計與實現
京東關鍵詞搜索商品列表的Python實戰
評論