一、京東搜索關鍵詞的核心特性
支持中文直接搜索:京東官網支持中文關鍵詞輸入(如 “筆記本電腦”、“華為手機”),但在 HTTP 請求中,中文關鍵詞會被自動進行URL 編碼(將中文轉換為%XX格式的字符串)。
關鍵詞與搜索結果的關聯性:關鍵詞的精準度決定爬取結果的相關性,京東搜索會對關鍵詞進行分詞匹配(如 “Python 實戰書籍” 會拆分匹配 “Python”、“實戰”、“書籍”)。
請求參數中的關鍵詞傳遞:在之前的爬蟲代碼中,關鍵詞通過params字典的"keyword"和"wq"字段傳遞,其中"wq"字段是京東的補全搜索參數,與主關鍵詞保持一致可提高請求成功率。
二、關鍵詞的 URL 編碼處理
1. 自動編碼(推薦,爬蟲首選)
在使用requests庫發送請求時,將關鍵詞直接傳入params參數,requests會自動完成中文關鍵詞的 URL 編碼,無需手動處理,這也是之前代碼中采用的方式,示例:
python
運行
import requests from fake_useragent import UserAgent ua = UserAgent() headers = {"User-Agent": ua.random} # 直接傳入中文關鍵詞,無需手動編碼 keyword = "Python實戰書籍" url = "https://search.jd.com/Search" params = { "keyword": keyword, "enc": "utf8", "page": 1 } # requests會自動將“Python實戰書籍”編碼為URL可識別格式 response = requests.get(url, params=params, headers=headers, timeout=15) print("最終請求URL:", response.url) # 可查看編碼后的完整URL
2. 手動編碼(備用方案)
若需手動處理關鍵詞編碼,可使用 Python 內置的urllib.parse.quote()方法,適用于不使用requests參數傳遞的場景,示例:
python
運行
from urllib.parse import quote
# 中文關鍵詞手動URL編碼
keyword = "Python實戰書籍"
encoded_keyword = quote(keyword, encoding="utf-8") # 指定utf-8編碼(京東要求)
print("編碼后關鍵詞:", encoded_keyword) # 輸出:Python%E5%AE%9E%E6%88%98%E4%B9%A6%E7%B1%8D
# 手動構造編碼后的URL
url = f"https://search.jd.com/Search?keyword={encoded_keyword}&enc=utf8&page=1"
三、關鍵詞的構造與優化技巧(提升爬取精準度)
1. 精準關鍵詞構造(獲取目標商品)
帶品牌 / 型號:如 “華為 Mate 60 Pro 手機”、“聯想拯救者 Y9000P 筆記本”
帶規格 / 參數:如 “16G 512G 輕薄筆記本”、“500ml 保溫杯 316 不銹鋼”
帶用途:如 “辦公用激光打印機”、“學生黨平價平板電腦”
2. 模糊關鍵詞構造(獲取泛類商品)
適用于爬取某一類商品的整體信息,如 “筆記本電腦”、“休閑零食”、“家居收納用品”,這類關鍵詞返回結果數量多,適合批量學習爬蟲數據處理。
3. 排除式關鍵詞(過濾無關結果)
京東支持使用-符號排除無關內容,構造關鍵詞時可利用這一規則提升爬取結果的精準度,示例:
關鍵詞 “筆記本電腦 - 游戲本”:爬取非游戲本的筆記本電腦
關鍵詞 “保溫杯 - 塑料 - 兒童”:爬取成人用、非塑料材質的保溫杯
四、爬蟲中關鍵詞使用的注意事項
避免敏感關鍵詞:勿爬取涉及違禁品、侵權商品、醫療藥品等敏感關鍵詞的內容,遵守平臺規則和法律法規。
關鍵詞格式化處理:去除關鍵詞前后的空格、特殊字符(如#、@),避免請求失敗或返回無效結果,示例:
python
運行
def format_keyword(keyword):
"""關鍵詞格式化:去空格、去特殊字符"""
# 去除前后空格
keyword = keyword.strip()
# 去除常見無效特殊字符
invalid_chars = ["#", "@", "¥", "★", "☆"]
for char in invalid_chars:
keyword = keyword.replace(char, "")
return keyword
# 格式化使用
raw_keyword = " ¥Python書籍★實戰 "
target_keyword = format_keyword(raw_keyword)
print("格式化后關鍵詞:", target_keyword) # 輸出:Python書籍實戰
防止中文亂碼:無論是關鍵詞傳遞還是結果保存,均統一使用utf-8編碼(與之前爬蟲代碼中的response.encoding = "utf-8"、文件保存encoding="utf-8"保持一致)。
批量關鍵詞爬取的延時控制:若需循環爬取多個關鍵詞(如 ["Python 書籍", "Java 書籍", "C++ 書籍"]),需在關鍵詞之間添加額外延時(≥3 秒),避免高頻請求觸發反爬,示例:
python
運行
import time
from fake_useragent import UserAgent
# 批量關鍵詞列表
keyword_list = ["Python書籍", "Java書籍", "C++書籍"]
for keyword in keyword_list:
print(f"開始爬取關鍵詞:{keyword}")
goods_list = get_jd_goods(keyword=keyword, page=1) # 調用之前的爬蟲函數
save_goods_to_txt(goods_list, keyword)
# 關鍵詞之間添加3秒延時,強化反爬
time.sleep(3)
五、補充:京東關鍵詞搜索的特殊規則
關鍵詞中的空格代表 “并列匹配”:如 “手機 快充”,會匹配同時包含 “手機” 和 “快充” 的商品。
雙引號包裹關鍵詞代表精確匹配:如"Python核心編程",會嚴格匹配完整關鍵詞,不進行分詞拆分,爬取結果更精準(需注意:雙引號傳入請求時無需轉義,requests會自動處理)。
部分特殊符號(如*、?)在京東搜索中無效,爬蟲中構造關鍵詞時可直接剔除。
總結
京東爬蟲中,中文關鍵詞優先使用requests自動 URL 編碼,無需手動處理,簡潔高效。
關鍵詞的精準構造(帶品牌 / 規格)和格式化處理,是提升爬取結果相關性的關鍵。
批量關鍵詞爬取時,需添加額外延時,同時避免敏感關鍵詞,遵守爬蟲合規原則。
銜接之前的實戰代碼,修改target_keyword變量為不同優化后的關鍵詞,即可獲取對應的商品列表。
審核編輯 黃宇
-
API
+關注
關注
2文章
2368瀏覽量
66752 -
京東
+關注
關注
2文章
1108瀏覽量
50076
發布評論請先 登錄
淺談京東關鍵詞
評論