[Python] python + selenium 抓取 京东商品数据(商品名称,售价,店铺,分类,订单信息,好评率,评论等)

本文介绍了使用Python和Selenium爬取京东商品信息的详细步骤,包括商品名称、售价、店铺、分类、订单信息、好评率和评论等。通过分析网页结构,解决动态加载问题,实现数据抓取。文章还分享了在实际操作中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

一、环境

二、简介

三、京东网页分析

1.获取商品信息入口--商品列表链接获取

2.获取商品信息入口--商品详情链接获取

3.商品详情获取

4.商品评论获取

四、代码实现

五、运行结果

六、结语


一、环境

       win10 + python 3.7 + pycharm64 + selenium

二、简介

       抓取京东商品页面信息:商品名称,售价,店铺,分类,订单信息,好评率,评论等----这里以'每周一花'为例

三、京东网页分析

       采集思路如下:

此次主要采集以下字段数据:

  • title:商品名称
  • price:售价
  • brand:品牌
  • shop_name:店名
  • weight:商品重量
  • user:适用人群
  • classify:商品分类
  • comment_num:系列商品总评论数
  • praise_degree:系列商品总好评度
  • tag_list:系列商品总评价标签
  • single_comment_num:当前商品评论条数
  • single_tags:当前商品评价标签
  • member:顾客会员级别
  • star:评星等级
  • comment:评语
  • pic_num:评论图片数/视频数
  • order:订单详情(包含订单形式、下单日期等)

1.获取商品信息入口--商品列表链接获取

        爬取商品信息首先得有商品信息入口,这里直接从京东的分类中进入商品列表页面,没有对搜索关键词进行处理,仅处理了商品的页码。

       翻看网页,发现共有16页,想用点击下一页(click()的方式)实现翻页,获取每一个商品列表链接。

       这里有个坑需要注意:class='pn-next disabled',在第16页依旧可以找到,如果以此设置click() 在第16页后依旧会执行,抓取到别的类目的链接。

踩坑后用设置url的方式获取商品列表链接

翻看多页发现url里的页码关键字:

page:页码(奇数递增)

s:sku数(page*60+1)

构建请求url:

url='https://search.jd.com/Search?keyword=%E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1&page='+str(i*2+1)+'&s='+str(i*60+1)+'&click=0'

网页对搜索关键词进行了加密,将 ‘ 每周一花 ’ 转化为 ' %E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1 '

可以用 request.unquote()对其解密

一共16页,用for循环获取所有商品列表链接:用urltrue_list接收数据

#获得 京东每周一花的16个商品列表链接 这里可以定义函数,传入要抓取的关键字或页数,使其更加灵活
urltrue_list=[]
for i in range(16):
    url='https://search.jd.com/Search?keyword=%E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E6%AF%8F%E5%91%A8%E4%B8%80%E8%8A%B1&page='+str(i*2+1)+'&s='+str(i*60+1)+'&click=0'
    urltrue=request.unquote(url)
    urltrue_list.append(urltrue)

2.获取商品信息入口--商品详情链接获取

打开商品列表链接,每一页都有60个商品,如果直接抓取会发现只能抓到30个,原因是:后30条信息是动态加载的

### 如何使用Python编写爬虫程序抓取京东手机商品数据 为了实现从京东平台上获取手机商品的品牌名、店铺名、好评率和价格数据,可以借助 `Selenium` 和 `BeautifulSoup` 等工具完成网页解析与数据提取的任务。以下是具体方法: #### 使用 Selenium 进行动态页面加载 由于京东商品详情页通常由 JavaScript 动态渲染生成,传统的静态 HTML 解析可能无法满足需求。因此,可以选择 `Selenium` 来模拟浏览器行为并加载完整的动态页面内容[^4]。 ```python from selenium import webdriver import time # 初始化 WebDriver(需提前下载对应版本的 ChromeDriver) driver = webdriver.Chrome() # 访问目标 URL url = "https://www.jd.com" driver.get(url) # 模拟滚动到底部以加载更多商品信息 for _ in range(5): # 假设需要滚动多次来加载足够的商品 driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 等待页面加载完毕 html_content = driver.page_source driver.quit() ``` #### 数据解析与提取 利用 `BeautifulSoup` 对已加载的 HTML 页面进行结构化处理,并从中抽取所需字段(品牌名、店铺名、好评率、价格)。需要注意的是,具体的标签名称和类名可能会因网站更新而改变,建议通过开发者工具查看最新的 DOM 结构[^1]。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') items = soup.find_all('div', class_='gl-i-wrap') # 商品列表项容器的选择器 data_list = [] for item in items: try: brand_name = item.select_one('.p-shop').text.strip() if item.select_one('.p-shop') else "未知品牌" # 店铺/品牌名 shop_name = item.select_one('.J_im_icon')['title'] if item.select_one('.J_im_icon') else "无店铺信息" # 商家名称 good_rate = item.select_one('.comment-con .u-star-num').text.strip() if item.select_one('.comment-con .u-star-num') else "暂无评价" # 好评率 price = item.select_one('i.price').text.strip() if item.select_one('i.price') else "未标明价格" # 单价 data_list.append({ 'brand': brand_name, 'shop': shop_name, 'good_rate': good_rate, 'price': price }) except Exception as e: print(f"Error occurred while parsing an item: {e}") print(data_list[:5]) # 输出前五个样本验证结果 ``` #### 存储到文件或数据库 将收集到的信息保存至本地 CSV 文件或者导入关系型数据库以便后续分析操作[^2]。 ```python import pandas as pd df = pd.DataFrame(data_list) df.to_csv('./jd_mobile_products.csv', index=False, encoding='utf_8_sig') ``` 以上即为整个流程概述及其对应的代码片段展示。值得注意的是,在实际开发过程中还需考虑异常情况下的错误捕获机制以及遵守目标站点的服务条款规定等内容[^3]。 ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值