selenium_获取京东商品价格

2023-11-17

import time
from selenium.webdriver.chrome.options import Options
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from pymongo import MongoClient
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
import urllib

options = Options()

# 开启无界面模式
options.add_argument('--headless')
web = Chrome(options=options)


def get_save_goods():
    # 输入要搜索的商品名称
    good_name = input('请输入你要爬取的商品名称:')
    # 编码加入到url中
    good_name_unicode = urllib.parse.quote(good_name)
    url = f'https://search.jd.com/Search?keyword={good_name_unicode}'
    web.get(url)
    # 设置等待时间
    WAIT = WebDriverWait(web, 10)

    while True:
        # 新的商品页等待3秒
        time.sleep(3)
        # 隐式等待 根据下面要查询的元素 10s未找到就报错
        # web.implicitly_wait(10)

        # 获取爬取的页数
        page = WAIT.until(EC.element_to_be_clickable((By.XPATH, '//span/a[@class="curr"]'))).text
        print(f'开始爬取第{page}页')

        # 获取商品信息的列表
        li_lists = web.find_elements(By.XPATH, '//div[@id="J_goodsList"]/ul/li')
        print(len(li_lists))

        # 用xpath获取各个商品的信息
        for li_list in li_lists:

            name = WAIT.until(EC.element_to_be_clickable(li_list.find_element(By.XPATH, './/div[@class="p-name p-name-type-2"]/a/em'))).text.replace('\n', '')

            join_name = ''.join(name)

            link = WAIT.until(EC.element_to_be_clickable(li_list.find_element(By.XPATH, './/div[@class="p-name p-name-type-2"]/a'))).get_attribute('href')

            price = WAIT.until(EC.element_to_be_clickable(li_list.find_element(By.XPATH, './/div[@class="p-price"]//i'))).text


            try: # 有的商品没有显示厂家
                shop = WAIT.until(EC.element_to_be_clickable(li_list.find_element(By.XPATH, './/div[@class="p-shop"]//a'))).text
            except:
                shop = '厂家配送'

            comment = WAIT.until(EC.element_to_be_clickable(li_list.find_element(By.CSS_SELECTOR, '.p-commit a'))).text
            data = {
                '商品名称': name,
                '商品链接': link,
                '价格': price,
                '商店名称': shop,
                '评论': comment
            }
            # 储存到mongodb
            print(data)
            client = MongoClient(host='localhost', port=27017)
            # 库
            db = client['jd']
            # 表
            collections = db[good_name]
            # 插入数据
            collections.insert_one(data)

        # 爬完5页停止
        if int(page) == 5:
            break
        #     点击下一页
        js = WAIT.until(EC.element_to_be_clickable(web.find_element(By.XPATH, '//a[@class="pn-next"]')))
        js.click()

        # 等待加载完毕
        time.sleep(2)

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

selenium_获取京东商品价格 的相关文章

  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate

随机推荐