python爬取京东商品信息及评论

2023-05-16

准备

  1. chrome浏览器 和 chromeDriver插件 (其他浏览器步骤类似)
  2. python 环境
  3. python selenium模块

代码

'''
爬取京东商品信息: 
功能: 通过chromeDrive进行模拟访问需要爬取的京东商品详情页(https://item.jd.com/100003196609.html)并且程序支持多个页面爬取,输入时以逗号分隔,
思路: 创建webdriver对象并且调用get方法请求url,进入页面根据dom结构爬取一些简要信息,之后
通过模拟点击商品评价按钮,再分别解析没个用户的评价信息,到每页的底部时,模拟点击下一页按钮
获取新的一页数据。
    提取商品信息:
        商品名称: {goods_name}
        商品价格: {goods_price}
        好评度: {percent_con}
        评价标签: {tags}
        评价类型
        姓名:{username}
        星级:{star}
        文字:{word}
        评价图片: {picList}
        购买类型: {order_type}
        购买日期:{order_date}
        点赞人数: {likes}
        评论人数: {
'''
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
# 根据类名用来判断元素是否存在
def isElementPresent(driver, element):
        """
        用来判断元素标签是否存在,
        """
        try:
            driver.find_element_by_class_name(element)
        # 原文是except NoSuchElementException, e:
        except NoSuchElementException as e:
            # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
            return False
        else:
            # 没有发生异常,表示在页面中找到了该元素,返回True
            return True
## 获取评价
def get_evaluation(goods_detail):
    js_code = '''
                                            window.scrollTo(0,2000);
                                        '''
    driver.execute_script(js_code)  # 执行js代码
    ## 评价详细信息
    try:
        comments = goods_detail.find_elements_by_class_name('comment-item')
        for comment in comments:
            picList = []
            username = comment.find_element_by_class_name('user-info').text.replace("\n", "")
            star = comment.find_element_by_class_name('comment-star').get_attribute('class')[-1] + '星级'
            word = comment.find_element_by_class_name('comment-con').text.replace("\n", "")
            # 调用isElementExist方法,判断元素是否存在
            flag = isElementPresent(comment, 'pic-list')
            if  flag:
                pics = comment.find_element_by_class_name('pic-list').find_elements_by_tag_name('a')
                for pic in pics:
                    picList.append(pic.find_element_by_tag_name('img').get_attribute('src'))
            order_type = comment.find_element_by_class_name('order-info').find_elements_by_tag_name('span')[0].text
            order_date = comment.find_element_by_class_name('order-info').find_elements_by_tag_name('span')[-1].text

            likes = comment.find_element_by_class_name('J-nice').text
            sprite_comment = comment.find_element_by_class_name('comment-op').find_elements_by_tag_name('a')[2].text
            goods_content = f'''    
                姓名:{username}
                星级:{star}
                文字:{word}
                评价图片: {picList}
                购买类型: {order_type}https://item.jd.com/100003196609.html,https://item.jd.com/100006966435.html,https://item.jd.com/100001168786.html
                购买日期:{order_date}
                点赞人数: {likes}
                评论人数: {sprite_comment}
            '''
            print(goods_content)
    except NoSuchElementException as e:
        print(e)
def get_good(driver):
    # 通过JS控制滚轮滑动获取所有商品信息
    js_code = '''
                                        window.scrollTo(0,5000);
                                    '''
    driver.execute_script(js_code)  # 执行js代码
    # 等待数据加载
    time.sleep(2)
    # 商品详情wrap
    goods_detail = driver;
    # 商品名称
    goods_name = goods_detail.find_element_by_class_name('sku-name').text.replace("\n", " ")
    # 商品价格
    goods_price = goods_detail.find_element_by_class_name('price').text.replace("\n", " ")

    # 评价信息
    evaluation_btn = goods_detail.find_element_by_id('detail').find_element_by_class_name('tab-main').find_elements_by_tag_name('li')[4]
    evaluation_btn.click()
    print(evaluation_btn.text)
    time.sleep(2)
    # 好评度
    percent_con = goods_detail.find_element_by_class_name('percent-con').text.replace("\n", " ")
    # 评价tag
    evaluation_tags = goods_detail.find_elements_by_class_name('tag-1')
    tags = []
    for tag in evaluation_tags:
        tags.append(tag.text)
    # 评价类型
    evaluation_type_list = goods_detail.find_element_by_class_name('filter-list').find_elements_by_tag_name('li')
    types = []
    for type in evaluation_type_list:
        if (type.get_attribute('data-tab') == 'trigger'):
            types.append(type.find_element_by_tag_name('a').text)
    goods_content = f'''
                           商品名称: {goods_name}
                           商品价格: {goods_price}
                             好评度: {percent_con}
                           评价标签: {tags}
                           评价类型: {types}
                           \n
                          '''
    print(goods_content)

    ## 爬取评价信息
    get_evaluation(goods_detail)
    n =1
    # 爬取后面的页面
    while True:
        flag = isElementPresent(goods_detail, 'ui-pager-next')
        if flag:
            element = driver.find_element_by_class_name('ui-pager-next')
            driver.execute_script("arguments[0].click();", element)
            # 等待数据加载
            time.sleep(2)
            n = n+1
            ## 爬取评价信息
            get_evaluation(goods_detail)
            print('%d商品页数:' % n)
        else:
            print('到底了.')
            return
    print('商品总页数:%d' % n)
if __name__ == '__main__':

    # chrome_options = Options()
    # chrome_options.add_argument('--headless')
    # chrome_options.add_argument('--disable-gpu')
    # driver = webdriver.Chrome(options=chrome_options)

    # 获取用户商品的url
    urlList = input('请输入爬取商品url(以逗号分割):').strip()
    urlList = urlList.split(',')

    # 可视化界面  需要下载 chromeDiiriver 及 chrome浏览器
    driver = webdriver.Chrome()
    driver.implicitly_wait(5)

    for url in urlList:
        driver.get(url)
        get_good(driver)
    driver.close();





第一个版本…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬取京东商品信息及评论 的相关文章

  • Ubuntu添加/删除PPA源

    一 PPA介绍 PPA xff08 Personal Package Archives xff0c 个人软件包文档 xff09 xff0c 是Ubuntu Launchpad网站提供的一项源服务 xff0c 允许个人用户上传软件源代码 xf
  • 操作系统之进程概念及其组成

    一 进程 在多道程序环境下 xff0c 允许多个程序并发执行 xff0c 此时它们将失去封闭性 xff0c 并具有间断性及不可 再现性的特征 为此引入了进程 Prnccss 的概念 xff0c 以便更好地描述和控制程序的并发执行 xff0c
  • GTSAM中imu预积分及其因子图优化过程

    前言 使用IMU和llidar或者相机进行多传感器融合的slam方案中 xff0c 主要分为紧耦合和松耦合方案 目前 xff0c 主流的方案都是紧耦合的 而紧耦合方案中主要分为基于滤波 xff08 比如 xff0c ESKF xff09 和
  • Python 学习笔记 模块 & 目录遍历 & 包

    一 模块 xff1a 1 概述 xff1a 为了解决维护问题 xff0c 一般情况下 xff0c 在一个完整的项目中 xff0c 会将特定的功能分组 xff0c 分别放到不同的文件中 xff0c 在使用的过程中 xff0c 可以单独维护 x
  • realsense-ros环境配置

    项目场景 xff1a 相机型号RealsenseD435i 环境 xff1a ubuntu1604 xff0c 内核4 15 0 126 generic uname r可查看内核 参考链接 xff1a https github com In
  • realsense相机SDK——librealsense使用方法及bug解决(ubuntu)

    realsense环境配置参考https blog csdn net m0 43436602 article details 110930512 一 librealsense在哪里 xff1f 安装完环境之后 xff0c 可以去根目录下搜一
  • uCOS消息队列相关函数的理解

    OSQCreate xff1a 创建消息队列函数 有四个入口参数 xff1a 消息队列指针 xff1b 消息队列名称 xff1b 消息队列大小 xff08 不能为0 xff09 xff1b 返回错误类型 函数过程 xff1a 首先进行安全检
  • uCOS任务信号量相关函数代码理解

    强调任务信号量思想 xff1a 任务信号量只是一个标志 xff0c 获取成功就是指把信号量计数值减1 xff1b 释放就是指把信号量计数值加1 xff08 溢出则计数值不变 xff09 获取信号量需要判断信号量是否可用 xff08 大于0
  • (二)灰度图像二值化

    灰度图像二值化 一 知识简介 图像二值化 xff08 Image Binarization xff09 就是将图像上的像素点的灰度值设置为0或255 xff0c 也就是将整个图像呈现出明显的黑白效果的过程 在数字图像处理中 xff0c 二值
  • Modbus RS485 设备的串口调试

    Modbus RS485 设备的串口调试 准备Modbus功能码二 使用步骤1 接线2 串口调试 温湿度的计算 准备 硬件设备 xff1a 电脑 RS485 温湿度传感器 RS485 土壤温湿度传感器 RS485 继电器控制模块 TTL转R
  • Linux为什么区分内核空间和用户空间

    程序如果要被CPU执行 xff0c 就得编译成CPU可以执行的指令 xff0c 一大堆的程序就变成了一堆的指令 一个操作系统它也是一堆程序组成的 xff0c 可以想象CPU的指令是很多的 xff0c 但是这么多的指令中 xff0c 有些指令
  • 【Docker】镜像的保存(save)到文件 与 加载(load)到宿主机

    背景 xff1a 我们制作好的镜像会存储在宿主机上 xff0c 那么在迁移的过程中 xff0c 我们应该如何 保存自定义的镜像到宿文件 或 加载自定义的镜像到宿主机呢 xff1f 制作镜像 xff1a docker build t 镜像名
  • 手把手教你学会闭包

    前言 MDN对闭包的解释是这样的 xff1a 一个函数和对其周围状态 xff08 lexical environment xff0c 词法环境 xff09 的引用捆绑在一起 xff08 或者说函数被引用包围 xff09 xff0c 这样的组
  • 从高考到程序员:选择专业三要素:擅长、喜欢、有价值

    参与从高考到程序员征文 xff1a http blog csdn net blogdevteam article details 72917467 从高考到程序员 xff1a 选择专业三要素 xff1a 擅长 喜欢 有价值 选择工作三要素
  • 舍选抽样法

    对于一个随机变量X xff0c 对其直接进行抽样比较困难时 xff0c 我们可以选择一个比较容易产生随机数且逼近f很好的一个分布f y 来对其进行抽样 xff0c 下面以贝塔分布为例进行舍选抽样 ps 实际上 应该是先找了一个f y 使得c
  • 初识STM32工作原理和基础编程

    一 初识STM32如何简单的点亮一个LED灯呢 xff1f 如何用一个按键控制LED灯的点亮与否呢 xff1f 本文将对这些问题做一个比较详细的解答 xff0c 其中还有几个比较经典的例子 xff0c 希望能帮助大家更好的理解STM32的工
  • 结构体为何要进行对齐以及如何对齐

    先说如何对齐 xff0c 再讲讲其背后的原理 对齐规则在网上和书上都很容易找到 无非就是以下几点 规则 1 第一个成员在与结构体变量偏移量为0的地址处 2 其他成员变量要对齐到某个数字 xff08 对齐数 xff09 的整数倍的地址处 对齐
  • 【Android Studio】Build Output输出中文乱码解决方法

    目录 问题 解决办法 修改配置文件 重启AS xff0c 再次触发Build 问题 解决办法 修改配置文件 Help gt Edit Custom VM Options 点击create 打开的配置文件中加入 xff1a Dconsole
  • vscode操作git

    vscode amp git vscode和git的联合 xff0c 完美的配合 本人是一个忠实的vscode使用用户 xff0c 毕竟他是开源的 xff0c 使用electron xff0c typescript开发的软件 是免费的 xf
  • Docker学习笔记(一)——解决docker权限问题

    1 解决docker权限问题 安装完docker后 xff0c 执行docker相关命令 xff0c 出现 xff1a Got permission denied while trying to connect to the Docker

随机推荐

  • docker打过tag标签后向镜像仓库推送镜像(push)

    推送镜像 在推送前 xff0c 必须给镜像打标签 xff0c 否则推送失败 xff0c 其实打标签就是定义一个版本标识 我们看下未打标签推送的提示信息 xff0c 其中swr 6666指向镜像仓库 xff1a span class toke
  • secureCRT安装和使用教程【图文并茂】

    secureCRT安装和使用教程 图文并茂 1 软件安装 2 软件使用 3 软件总结 1 软件安装 简介 一般而言 xff0c 嵌入式开发板使用串口来监控后台 可以使用串口线连接开发板和电脑 xff0c 对于没有串口的笔记本电脑来说 xff
  • tftpd32+ tftpd64文件传输安装和使用教程【图文并茂】

    tftpd32 43 tftpd64文件传输安装和使用教程 图文并茂 1 tftp软件安装 2 tftp使用教程 1 tftp软件安装 将编译好的程序放到开发板中去运行 xff0c 需要借助于一些软件 xff0c 下面介绍最常用的通过tft
  • Maven项目管理工具学习笔记

    Maven项目管理工具学习笔记 由于本人在最近的项目中使用到了Maven xff0c 但是之前对Maven并没有深入地了解 xff0c 所以借此机会 xff0c 在网上查阅资料 xff0c 对Maven进行进一步的了解 xff0c 并做记录
  • PyQt4控件失去焦点和获得焦点

    QListView控件多选设置 self ui listView setSelectionMode QAbstractItemView ExtendedSelection 初始化QListView控件焦点事件 self ui listVie
  • 远程工具MobaXterm安装和使用教程

    远程登录工具MobaXterm安装和使用教程 1 MobaXterm简介 2 MobaXterm安装 3 MobaXterm使用 创建SSH session 创建串口 session 右键粘贴 4 MobaXterm安全 1 MobaXte
  • GEC6818开发板使用和配置

    GEC6818开发板使用和配置 GEC1808开发板简介极致低功耗强大 AI 运算能力面向 AIoT 应用的丰富接口易于开发主控芯片特性参数 常用接口说明电源接口调试串口CSI摄像头接口以太网接口音频输入接口LCD接口 开发板功能 常用接口
  • Linux最常用命令50条【呕心沥血呐,望用之取之】

    Linux常用命令大全 第一章 Linux基础命令 1 linux ls 2 linux alias 3 linux cd 4 linux clear 5 linux date 6 linux dpkg 7 linux echo 8 lin
  • STM32 GPIO LED和蜂鸣器实现【第四天】

    STM32 GPIO LED实现 原理图一 STM32大小说明二 STM32时钟分析三 GPIO分析1 注意点 四 寄存器地址查找1 写出GPIOF外设的所有寄存器地址 五 LED灯开发1 理解led灯原理图2 打开GPIOF组时钟4 通过
  • Linux安装qt完整版教程

    Linux安装qt完整版教程 一 获取Linux qt版本二 linux安装qt三 配置qt环境变量四 linux qt相关的显示配置 一 获取Linux qt版本 qt 版本5 12 8官网下载地址 选择国内的下载渠道 xff0c 更快
  • STM32嵌入式工程师自我修养

    STM32嵌入式工程师自我修养 一 STM32必备技能二 程序员必须熟知三 学习STM32自备资料和硬件 一 STM32必备技能 1 熟悉 C 语言编程 xff0c 熟练 STM32CUBEMX Keil 开发环境 2 熟悉基于STM32
  • Qt 按钮组(Buttons)输入组(Input Widgets) 显示控件组(Display Widgets) 间隔组(Spacers) 布局组(Layouts) 容器组Containers等

    文章目录 按钮组 xff08 Buttons xff09 输入部件组 xff08 Input Widgets xff09 显示控件组 xff08 Display Widgets xff09 空间间隔组 xff08 Spacers xff09
  • Qt 对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)、QMessageDialog

    文章目录 标准文件对话框 QFileDialog 代码简介QFileDialog类常用静态函数 标准颜色对话框 QColorDialog 代码简介QColorDialog类常用静态函数 标准字体对话框 QFontDialog 代码简介QFo
  • qt 使用textBrowser显示文字和图片,文字居中,图片居中,已测可用

    QTextBrowser显示图文操作 直接上源码UI设计效果截图源码方法2 推荐 源码 直接上源码 这里只给出框架 xff0c 美化的事交给有缘人 UI设计 效果截图 源码 span class token macro property s
  • HTTP报文格式详解

    文章目录 HTTP报文格式请求报文请求行请求头部空行请求数据 响应报文状态行响应头部空行响应体 HTTP报文格式 HTTP报文是面向文本的 xff0c 报文中的每一个字段都是一些ASCII码串 xff0c 每个字段的长度是不确定的 HTTP
  • 从源码分析HashMap集合之属性(一)

    注 xff1a 笔者所使用的jdk为1 8 xff0c 因本人水平有限 xff0c 难免会有错误 xff0c 请批评指正 xff0c 弥补不足 xff0c 多谢 xff0c 另转载请注明出处 我们首先来看下一下HashMap类 public
  • Linux下实现苹果AirPlay音频服务器

    一 背景 背景 xff1a 在华清学习之余 xff0c 自行研究了智能家居的东西 xff0c 为了解决智能家居中背景音乐问题研究如下 xff1a 调查发现现有技术中有DLNA AirPlay Miracast三种 文章后有些项并未验证 xf
  • uCOS-III基础入门函数

    uCOS III是一个主要是运行在单片机上操作系统 xff0c 可以实现并发 xff0c 主要的功能就是任务 mutex event的创建和使用 调度器 调度器就是使用相关算法来决定当前需要执行的任务 xff0c 调度器的核心有两个 xff
  • Java接口实现

    接口是什么 xff0c 它的作用是什么 xff1f 首先 xff0c Java只能实现单继承 xff0c 而有时候实际需要要求我们实现多继承 xff0c 因此 xff0c 接口就是为了实现多继承而开发出来的 xff0c 并且接口支持程序在运
  • python爬取京东商品信息及评论

    准备 chrome浏览器 和 chromeDriver插件 xff08 其他浏览器步骤类似 xff09 python 环境python selenium模块 代码 span class token triple quoted string