首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >动态渲染爬虫:Selenium抓取京东关键字搜索结果

动态渲染爬虫:Selenium抓取京东关键字搜索结果

原创
作者头像
小白学大数据
发布2025-08-15 16:23:11
发布2025-08-15 16:23:11
28000
举报
运行总次数:0

1. 引言

在当今电商数据分析和市场研究中,获取京东商品数据是许多企业和研究者的核心需求。然而,京东作为国内领先的电商平台,采用了复杂的反爬机制,包括动态渲染、AJAX加载和验证码等,使得传统的静态页面爬取方法难以奏效。本文将介绍如何使用 Selenium 这一强大的浏览器自动化工具,结合Python编程,高效抓取京东基于关键字搜索的商品数据,并提供完整的实现代码。

1.1 爬虫目标

  • 输入关键字(如"笔记本电脑"),自动打开京东搜索页面
  • 模拟真实用户行为滚动页面加载完整商品列表
  • 提取商品名称、价格、店铺名称、评论数、商品链接等关键信息
  • 处理京东的反爬机制,确保爬虫稳定运行

1.2 技术选型

  • Selenium:用于自动化浏览器操作,处理JavaScript渲染
  • ChromeDriver:与Chrome浏览器配合使用的驱动程序
  • BeautifulSoup:辅助解析HTML内容
  • Pandas:用于数据整理和存储

2. 环境准备

2.1 安装必要库

2.2 下载浏览器驱动

Selenium需要浏览器驱动来操作浏览器。我们使用webdriver-manager自动管理驱动:

代码语言:javascript
代码运行次数:0
运行
复制
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

3. 爬虫实现

3.1 京东搜索页面分析

京东搜索URL格式:

https://search.jd.com/Search?keyword=笔记本电脑&page=1

  • keyword参数指定搜索内容
  • page参数控制页码

页面特点:

  • 采用懒加载技术,滚动到页面底部才会加载更多商品
  • 商品信息通过JavaScript动态渲染
  • 需要完整模拟用户浏览行为

3.2 基础爬虫代码实现

(1)初始化浏览器
(2)搜索关键字并加载完整页面
代码语言:javascript
代码运行次数:0
运行
复制
def search_jd(keyword, pages=3):
    base_url = "https://search.jd.com/Search?keyword="
    all_products = []
    
    for page in range(1, pages+1):
        url = f"{base_url}{keyword}&page={page}"
        driver.get(url)
        
        # 模拟滚动加载所有商品
        for i in range(5):
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(2)  # 等待加载
            
        # 等待商品列表加载完成
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, ".gl-item"))
        )
        
        # 获取页面源码并用BeautifulSoup解析
        page_source = driver.page_source
        products = parse_page(page_source)
        all_products.extend(products)
        
        time.sleep(3)  # 避免请求过于频繁
    
    return all_products
(3)解析商品信息
代码语言:javascript
代码运行次数:0
运行
复制
from bs4 import BeautifulSoup

def parse_page(html):
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.select('.gl-item')
    products = []
    
    for item in items:
        try:
            name = item.select('.p-name em')[0].get_text(strip=True)
            price = item.select('.p-price i')[0].get_text(strip=True)
            shop = item.select('.p-shop a')[0].get_text(strip=True) if item.select('.p-shop a') else "自营"
            comment = item.select('.p-commit a')[0].get_text(strip=True) if item.select('.p-commit a') else "0"
            link = "https:" + item.select('.p-img a')[0]['href']
            
            products.append({
                'name': name,
                'price': price,
                'shop': shop,
                'comment': comment,
                'link': link
            })
        except Exception as e:
            print(f"解析商品出错: {e}")
            continue
            
    return products
(4)保存数据
代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd

def save_to_csv(products, filename='jd_products.csv'):
    df = pd.DataFrame(products)
    df.to_csv(filename, index=False, encoding='utf_8_sig')
    print(f"数据已保存到 {filename}")
(5)完整调用示例
代码语言:javascript
代码运行次数:0
运行
复制
if __name__ == "__main__":
    try:
        keyword = input("请输入要搜索的商品关键字: ")
        products = search_jd(keyword, pages=3)
        save_to_csv(products)
    finally:
        driver.quit()  # 确保浏览器关闭

4. 数据存储与扩展

4.1 存储到数据库

代码语言:javascript
代码运行次数:0
运行
复制
import sqlite3

def save_to_db(products, db_name='jd_products.db'):
    conn = sqlite3.connect(db_name)
    c = conn.cursor()
    
    c.execute('''CREATE TABLE IF NOT EXISTS products
                 (name TEXT, price TEXT, shop TEXT, comment TEXT, link TEXT)''')
    
    for p in products:
        c.execute("INSERT INTO products VALUES (?,?,?,?,?)",
                 (p['name'], p['price'], p['shop'], p['comment'], p['link']))
    
    conn.commit()
    conn.close()

4.2 扩展功能

  • 价格监控系统:定期爬取并比较价格变化
  • 商品比价功能:多平台数据对比
  • 自动化报告生成:使用数据分析生成市场报告

5. 总结

本文详细介绍了如何使用Selenium构建一个能够应对京东反爬机制的动态渲染爬虫,主要技术要点包括:

  1. Selenium浏览器自动化:模拟真实用户浏览行为
  2. 页面滚动加载处理:确保获取完整商品列表
  3. 反爬策略:模拟人类行为、使用代理IP等
  4. 数据存储方案:CSV和数据库存储

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 引言
    • 1.1 爬虫目标
    • 1.2 技术选型
  • 2. 环境准备
    • 2.1 安装必要库
    • 2.2 下载浏览器驱动
  • 3. 爬虫实现
    • 3.1 京东搜索页面分析
    • 3.2 基础爬虫代码实现
      • (1)初始化浏览器
      • (2)搜索关键字并加载完整页面
      • (3)解析商品信息
      • (4)保存数据
      • (5)完整调用示例
  • 4. 数据存储与扩展
    • 4.1 存储到数据库
    • 4.2 扩展功能
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档