python 获取商品信息 | 没想到销量最高的是

简介: python获取商品信息 | 没想到销量最高的是

哈喽大家好,我是咸鱼

今天我们使用 selenium 模块来简单分析一下商品信息

网址链接:https://www.jd.com/

完整源码在文章最后

元素定位

我们需要找到网页上元素的位置信息(xpth 路径)
image-20230607145846223.png
我们首先需要知道搜索框和搜索按钮的位置,然后才能把商品名字输入到搜索框中并点击收缩按钮

打开 F12,通过开发者调试工具检查相应的的位置,可得如下 Xpath 表达式:

# 输入框位置:
//*[@id="key"]

# 搜索按钮位置:
//*[@class='form']/button

以 python 书籍为例
image-20230607150209456.png
我们需要获取商品的名字、价格、评价数量以及店铺名
image-20230607150313062.png
image-20230607150448548.png
然后通过发者调试工具检查相应的的位置,可得如下 Xpath 表达式:

# 当前页面商品列表
//*[@id="J_goodsList"]/ul/li

# 商品名字
.//div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em

# 商品价格
.//div[@class="p-price"]/strong

# 商品评价数量
.//div[@class="p-commit"]/strong

#店铺名字
.//div[@class="p-shopnum"] | .//div[@class="p-shop"]

请注意,我在定位商品名字 xpath 的时候用了或(|),这是因为我在爬取其他商品信息的时候发现商品名字的 xpath 路径有多个

.//div[@class="p-name"]/a/em 或 .//div[@class="p-name p-name-type-2"]/a/em

image-20230607150912789.png
image-20230607150936764.png
商品店铺名字同理

.//div[@class="p-shopnum"].//div[@class="p-shop"]

且多个 Xpath 路径表达式可以同时使用,其语法如下:

xpath表达式1 | xpath表达式2 | xpath表达式3

实现了自动搜索后,接下来就是要抓取页面中的商品信息

需要注意的是你会发现只有将滑动条滚动至底部,商品才会全部加载完毕

我们还需要做个判断,当爬取到最后一页时,下一页这个按钮是点击不了的,这时候就退出爬虫程序
image-20230607151757989.png

代码实现

首先我们定义一个类 JdSpider,然后给它初始化对象

class JdSpider(object):
    def __init__(self):
        self.url = 'http://www.jd.com/' 
        self.options = webdriver.ChromeOptions()
        self.options.add_argument('--headless')  # 设置不显示窗口
        self.browser = webdriver.Chrome(options=self.options)  # 创建浏览器对象
        self.i = 0  # 计数,一共有多少件商品

然后是输入商品名字点击搜索按钮的代码实现

    def get_html(self):
        self.browser.get(self.url)
        self.browser.find_element(By.XPATH, '//*[@id="key"]').send_keys('python书籍')
        self.browser.find_element(By.XPATH, "//*[@class='form']/button").click()

获取信息

    def get_data(self):
        # 执行js语句,拉动进度条
        self.browser.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )
        # 给页面元素加载时预留时间
        time.sleep(2)
        # 用xpath提取每页中所有商品,最终形成一个大列表 \
        li_list = self.browser.find_elements(By.XPATH, '//*[@id="J_goodsList"]/ul/li')
        for li in li_list:
            # 构建空字典
            item = {
   }
            item['name']=li.find_element(By.XPATH, './/div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em').text.strip()
            item['price']=li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip()
            item['count']=li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip()
            item['shop']=li.find_element(By.XPATH, './/div[@class="p-shopnum"] | .//div[@class="p-shop"]').text.strip()
            print(item)
            self.i += 1

入口函数

    def run(self):
        # 搜索出想要抓取商品的页面
        self.get_html()
        # 循环执行点击“下一页”操作
        while True:
            # 获取每一页要抓取的数据
            self.get_data()
            # 判断是否是最一页,-1说明没找到,不是最后一页,执行点击 “下一页” 操作
            print(self.browser.page_source.find('pn-next disabled'))
            if self.browser.page_source.find('pn-next disabled') == -1:
                self.browser.find_element(By.CLASS_NAME, 'pn-next').click()
                # 预留元素加载时间
                time.sleep(1)
            else:
                print('数量', self.i)
                break

跑一下看看
image-20230607152009076.png
image-20230607152247583.png
小伙伴们可以对爬取到的数据进行一下数据清洗处理等操作,就能够进行数据分析了

源码如下:

from selenium import webdriver
import time
from selenium.webdriver.common.by import By


class JdSpider(object):
    def __init__(self):
        self.url = 'http://www.jd.com/'
        self.options = webdriver.ChromeOptions()
        self.options.add_argument('--headless')  # 无头模式
        self.browser = webdriver.Chrome(options=self.options)  # 创建无界面参数的浏览器对象
        self.i = 0  # 计数,一共有多少件商品
        # 输入地址+输入商品+点击按钮,切记这里元素节点是京东首页的输入栏、搜索按钮

    def get_html(self):
        self.browser.get(self.url)
        self.browser.find_element(By.XPATH, '//*[@id="key"]').send_keys('python书籍')
        self.browser.find_element(By.XPATH, "//*[@class='form']/button").click()
        # 把进度条件拉倒最底部+提取商品信息

    def get_data(self):
        # 执行js语句,拉动进度条件
        self.browser.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )
        # 给页面元素加载时预留时间
        time.sleep(2)
        # 用xpath提取每页中所有商品,最终形成一个大列表 \
        li_list = self.browser.find_elements(By.XPATH, '//*[@id="J_goodsList"]/ul/li')
        for li in li_list:
            # 构建空字典
            item = {
   }
            item['name']=li.find_element(By.XPATH, './/div[@class="p-name"]/a/em | .//div[@class="p-name p-name-type-2"]/a/em').text.strip()
            item['price']=li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip()
            item['count']=li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip()
            item['shop']=li.find_element(By.XPATH, './/div[@class="p-shopnum"] | .//div[@class="p-shop"]').text.strip()
            print(item)
            self.i += 1

    def run(self):
        # 搜索出想要抓取商品的页面
        self.get_html()
        # 循环执行点击“下一页”操作
        while True:
            # 获取每一页要抓取的数据
            self.get_data()
            # 判断是否是最一页,-1说明没找到,不是最后一页,执行点击 “下一页” 操作
            print(self.browser.page_source.find('pn-next disabled'))
            if self.browser.page_source.find('pn-next disabled') == -1:
                self.browser.find_element(By.CLASS_NAME, 'pn-next').click()
                # 预留元素加载时间
                time.sleep(1)
            else:
                print('数量', self.i)
                break


if __name__ == '__main__':
    spider = JdSpider()
    spider.run()
相关文章
|
30天前
|
SQL 存储 数据库
数据聚合大揭秘!Python如何一键整合海量信息,洞察数据背后的秘密?
【7月更文挑战第21天】在数据驱动时代,Python以强大库支持,如Pandas与SQLAlchemy,轻松聚合分析海量信息。Pandas简化数据整合,从CSV文件加载数据,利用`pd.concat()`合并,`groupby()`进行聚合分析,揭示销售趋势。SQLAlchemy则无缝链接数据库,执行SQL查询,汇总复杂数据。Python一键操作,开启数据洞察之旅,无论源数据格式,均能深入挖掘价值。
27 0
|
10天前
|
供应链 数据挖掘 Serverless
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】
|
12天前
|
数据采集 XML 数据可视化
【优秀python案例】基于Python的口红商品的爬虫与可视化的设计与实现
本文介绍了一个基于Python的京东商城口红商品爬虫与可视化系统,通过requests和lxml库抓取商品信息,使用pandas进行数据处理,matplotlib进行数据可视化,分析了口红的价格、评论数(销量)分布以及自营口红品牌的销量和商品种类。
【优秀python案例】基于Python的口红商品的爬虫与可视化的设计与实现
|
10天前
|
存储 BI Python
【python】python酒店客房管理信息系统(源码+论文)【独一无二】
【python】python酒店客房管理信息系统(源码+论文)【独一无二】
【python】python酒店客房管理信息系统(源码+论文)【独一无二】
|
22天前
|
网络安全 数据安全/隐私保护 网络虚拟化
|
8天前
|
数据采集 机器学习/深度学习 算法
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
|
12天前
|
JSON API 开发者
Python学习Get方式通过商品 ID请求 获取拼多多商品详情数据接口
拼多多商品详情数据接口服务使开发者或商家能编程获取平台商品详情,涵盖标题、价格、销量等关键信息,助力市场分析与决策。使用前需注册开发者账号并获取API密钥;构造含商品ID等参数的请求URL后发送至API服务器;接口以JSON格式返回数据。应用场景包括商品销售分析、选品、品牌口碑挖掘及竞品分析,为商家提供强大数据支持。
|
12天前
|
数据可视化 Python
【2023高教社杯】C题 蔬菜类商品的自动定价与补货决策 问题分析、数学模型及python代码实现
本文介绍了2023年高教社杯数学建模竞赛C题,涉及蔬菜类商品的自动定价与补货决策,包括问题分析、数学模型的构建以及Python代码实现,旨在优化商超的补货和定价策略以提高收益。
29 1
|
13天前
|
数据采集 存储 数据可视化
基于Python 网络爬虫和可视化的房源信息的设计与实现
本文介绍了一个基于Python Scrapy框架和echart库的房源信息采集与可视化系统,该系统通过自动化爬虫提高房地产数据采集效率,并通过Flask服务器实现数据的Web可视化展示,旨在帮助房地产从业人员和政策制定者高效、直观地了解房源信息。
|
19天前
|
Python
惊!Python进程间通信IPC,让你的程序秒变社交达人,信息畅通无阻
【8月更文挑战第1天】在编程世界中,进程间通信(IPC)犹如一场社交舞会,各进程通过IPC机制优雅地交换信息,共同完成复杂任务。IPC就像隐形桥梁,连接并行运行的进程,使它们能跨越边界自由沟通。Python提供了多种IPC机制,如管道、队列、共享内存和套接字等,适应不同需求。例如,使用`multiprocessing.Queue`实现进程间通信,生产者向队列添加数据,消费者取出并处理数据,两者虽独立却能有效协作。IPC打破了进程界限,使得程序能像社交达人般自由交流,构建出高效、灵活的应用。掌握IPC,让程序信息畅通无阻。
16 1