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