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