京东搜索关键词

你现在关注的是京东爬虫中的关键词相关知识点,包括关键词的 URL 处理、构造技巧、在爬虫中的使用注意事项等,我会围绕这部分展开详细讲解,衔接之前的爬虫实战内容。

一、京东搜索关键词的核心特性

  1. 支持中文直接搜索 :京东官网支持中文关键词输入(如 "笔记本电脑"、"华为手机"),但在 HTTP 请求中,中文关键词会被自动进行URL 编码 (将中文转换为%XX格式的字符串)。
  2. 关键词与搜索结果的关联性:关键词的精准度决定爬取结果的相关性,京东搜索会对关键词进行分词匹配(如 "Python 实战书籍" 会拆分匹配 "Python"、"实战"、"书籍")。
  3. 请求参数中的关键词传递 :在之前的爬虫代码中,关键词通过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. 排除式关键词(过滤无关结果)

京东支持使用-符号排除无关内容,构造关键词时可利用这一规则提升爬取结果的精准度,示例:

  • 关键词 "笔记本电脑 - 游戏本":爬取非游戏本的笔记本电脑
  • 关键词 "保温杯 - 塑料 - 儿童":爬取成人用、非塑料材质的保温杯

四、爬虫中关键词使用的注意事项

  1. 避免敏感关键词:勿爬取涉及违禁品、侵权商品、医疗药品等敏感关键词的内容,遵守平台规则和法律法规。

  2. 关键词格式化处理 :去除关键词前后的空格、特殊字符(如#@),避免请求失败或返回无效结果,示例:

    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书籍实战
  3. 防止中文乱码 :无论是关键词传递还是结果保存,均统一使用utf-8编码(与之前爬虫代码中的response.encoding = "utf-8"、文件保存encoding="utf-8"保持一致)。

  4. 批量关键词爬取的延时控制 :若需循环爬取多个关键词(如 ["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)

五、补充:京东关键词搜索的特殊规则

  1. 关键词中的空格代表 "并列匹配":如 "手机 快充",会匹配同时包含 "手机" 和 "快充" 的商品。
  2. 双引号包裹关键词代表精确匹配 :如"Python核心编程",会严格匹配完整关键词,不进行分词拆分,爬取结果更精准(需注意:双引号传入请求时无需转义,requests会自动处理)。
  3. 部分特殊符号(如*?)在京东搜索中无效,爬虫中构造关键词时可直接剔除。

总结

  1. 京东爬虫中,中文关键词优先使用requests自动 URL 编码,无需手动处理,简洁高效。
  2. 关键词的精准构造(带品牌 / 规格)和格式化处理,是提升爬取结果相关性的关键。
  3. 批量关键词爬取时,需添加额外延时,同时避免敏感关键词,遵守爬虫合规原则。
  4. 衔接之前的实战代码,修改target_keyword变量为不同优化后的关键词,即可获取对应的商品列表。
相关推荐
爱喝水的鱼丶1 天前
SAP-ABAP:从SAP中暴露REST API:完整实操SICF接口开发指南
运维·开发语言·api·sap·abap·rest·接口开发
曲幽1 天前
FastAPI异常处理全解析:别让你的API在用户面前“裸奔”
python·websocket·api·fastapi·web·exception·error·httexception
没有bug.的程序员1 天前
Spring Cloud Gateway:API网关限流与熔断实战
java·开发语言·数据库·spring boot·gateway·api·springcloud
sulikey3 天前
Steam《妹居物语》接入deepseek API教程
游戏·api·steam·deepseek·妹居物语
新诺韦尔API4 天前
手机空号检测接口技术对接常见问题汇总
大数据·开发语言·python·api
The_era_achievs_hero4 天前
封装api方法(全面)
前端·javascript·uni-app·api·封装接口
新诺韦尔API6 天前
车架号查询接口对接全流程详解
大数据·开发语言·python·api
REDcker8 天前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
云雾J视界9 天前
RAG 还是微调?用 Gemini API 打造企业私有知识库的落地路径
大数据·人工智能·api·知识库·rag·gemini
FITA阿泽要努力9 天前
动手体验:5min实现第一个智能体——1
json·api·agent·requests·查询天气·pprint·f-string