京东商品爬虫技术解析:基于Selenium的自动化数据采集实战

一、代码概述

本代码实现了一个京东商品数据自动化爬虫系统,核心功能包括 Cookie免密登录页面动态加载处理多页数据采集Excel数据存储。代码基于Python生态,主要依赖以下技术栈:

技术组件 作用
Selenium 浏览器自动化操作
lxml HTML页面解析
pandas 数据存储与Excel导出
Edge WebDriver 浏览器驱动

二、核心功能模块解析

1. Cookie管理机制

python 复制代码
def is_exists_cookies():
    cookie_file = './data/jd_cookies.txt'
    if os.path.exists(cookie_file):
        # 加载本地Cookie
        web.get(jd_domain)
        with open(cookie_file, 'r') as file:
            cookies = json.load(file)
            for cookie in cookies:
                web.add_cookie(cookie)
    else:
        # 首次登录保存Cookie
        web.get(jd_login_url)
        time.sleep(30)  # 手动登录时间窗口
        dictcookies = web.get_cookies()
        jsoncookies = json.dumps(dictcookies)
        with open(cookie_file, 'w') as f:
            f.write(jsoncookies)

技术亮点

  • 通过os.path.exists检测本地Cookie文件,实现免重复登录

  • add_cookie()方法将Cookie注入浏览器会话

  • JSON格式持久化存储登录凭证


2. 页面动态加载控制

python 复制代码
def slide(web):
    height = 0
    new_height = web.execute_script("return document.body.scrollHeight")
    while height < new_height:
        for i in range(height, new_height, 400):
            web.execute_script(f'window.scrollTo(0, {i})')
            time.sleep(0.5)
        height = new_height
        new_height = web.execute_script(...)

实现原理

  • 通过JavaScript脚本获取页面总高度

  • 分步滚动(每次400像素)模拟人工浏览

  • 循环检测直至滚动到底部


3. 商品数据解析

python 复制代码
def get_product(web):
    et = etree.HTML(web.page_source)
    obj_list = et.xpath('//div[@class="gl-i-wrap"]')
    
    for item in obj_list:
        title = ''.join(item.xpath('./div[@class="p-name"]//text()')).strip()
        price = item.xpath('./div[@class="p-price"]//i/text()')[0]
        shop = item.xpath('./div[@class="p-shop"]//a/text()')[0]
        sales = item.xpath('./div[@class="p-commit"]//text()')[0]
        img = item.xpath('./div[@class="p-img"]//img/@src')[0]

XPath定位策略

  • 商品列表容器://div[@class="gl-i-wrap"]

  • 价格字段:./div[@class="p-price"]//i/text()

  • 销量数据:./div[@class="p-commit"]//text()


4. 多页爬取逻辑

python 复制代码
def get_more(web, page):
    for i in range(page):
        button = web.find_element(By.XPATH, '//*[@id="J_bottomPage"]//a[9]')
        web.execute_script("arguments[0].click();", button)
        time.sleep(5)
        get_product(web)

翻页机制

  • 定位页码按钮(第9个a标签为下一页)

  • 通过execute_script执行点击操作

  • 固定等待5秒确保页面加载


5. 数据存储模块

python 复制代码
data = {
    "标题": titless, 
    "价格": prices,
    "店铺": shop_names,
    "销量": saleses,
    "图片": urls
}
pd.DataFrame(data).to_excel('./data/手机销售.xlsx', index=False)

Pandas技巧

  • 字典直接转换为DataFrame

  • index=False取消默认索引列

  • 支持中文字段存储


三、技术优化建议

1. 增强反爬对抗能力

python 复制代码
# 建议新增以下配置
op.add_argument("--disable-blink-features=AutomationControlled")
op.add_argument(f"user-agent={random.choice(USER_AGENTS)}")  # 随机UA
op.add_argument("--proxy-server=http://127.0.0.1:10809")     # 代理IP

2. 改进页面等待机制

python 复制代码
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 替换time.sleep为显式等待
wait = WebDriverWait(web, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "J_goodsList")))

3. 增加异常处理

python 复制代码
try:
    price = item.xpath('./div[@class="p-price"]//i/text()')[0]
except IndexError:
    price = "暂无报价"

4. 提升代码可配置性

python 复制代码
# 添加配置文件config.py
KEYWORDS = "vivo x100s" 
MAX_PAGE = 10
SAVE_PATH = "./data/"

四、潜在问题与解决方案

问题现象 原因分析 解决方案
商品列表加载不全 滚动速度过快 调整slide()步长至200像素
翻页按钮定位失败 页面DOM结构变更 改用CLASS_NAME定位器
数据包含空值 商品信息字段缺失 增加try-except捕获异常
Excel乱码 中文编码问题 导出时指定encoding='utf-8-sig'

五、项目扩展方向

  1. 分布式爬虫架构:结合Scrapy-Redis实现多节点协同

  2. 价格监控系统:定时任务+邮件报警功能

  3. 可视化看板:通过Matplotlib生成销量趋势图

  4. API服务化:使用FastAPI暴露数据接口


关注博主,获取更多Python爬虫实战技巧!

相关推荐
秋难降1 分钟前
线段树的深度解析(最长递增子序列类解题步骤)
数据结构·python·算法
猿榜3 分钟前
Python基础-控制结构
python
Ratten16 分钟前
【Python 实战】---- 实现一个可选择、配置操作的批量文件上传工具(三)上传类的实现
python
martinzh17 分钟前
提示词工程师到底是干什么的?
人工智能
Coovally AI模型快速验证19 分钟前
SOD-YOLO:基于YOLO的无人机图像小目标检测增强方法
人工智能·yolo·目标检测·机器学习·计算机视觉·目标跟踪·无人机
黎燃21 分钟前
无人机+AI:精准农业的“降维打击”实践
人工智能
茫茫人海一粒沙22 分钟前
RAG 分块中表格填补简明示例:Markdown、HTML、Excel、Doc
人工智能
爱喝奶茶的企鹅32 分钟前
Ethan开发者创新项目日报 | 2025-08-18
人工智能
却道天凉_好个秋32 分钟前
计算机视觉(一):nvidia与cuda介绍
人工智能·计算机视觉
binqian35 分钟前
【异步】js中异步的实现方式 async await /Promise / Generator
开发语言·前端·javascript