selenium练习实例

2023-11-11

1、项目流程




2、中心调度
# 中心调度
defmain():
    try:
        total = search()
        total = int(re.compile('.*?(d+).*?').search(total).group(1))
        fori inrange(2,total+1):
            next_page(i)
    exceptException ase:
        print('异常')
    finally:
        browser.close()

3、模拟查询

# 根据关键字查询
def search():
    try:
        browser.get('https://www.taobao.com/')
        # 直到搜索框加载出
        input_search = wait.until(EC.presence_of_element_located((By.ID,'q')))
        # 直到搜索按钮可以点击
        submit_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'btn-search')))
        input_search.send_keys(KEYWORDS)
        submit_button.click()
        total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'div.wraper  div.total')))
        get_products()
        returntotal.text
    exceptTimeoutException ase:
        print('响应超时')

4、下一页的操作

# 下一页爬取
def next_page(index):
    try:
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager div.form > input')))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager div.form > span.btn.J_Submit')))
        input.clear()
        input.send_keys(index)
        submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(index)))
        get_products()
    exceptNoSuchElementException ase:
        print('元素未加载')
        returnnext_page(index)

5、商品信息的解析

# 获取一页上所有的商品
def get_products():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-itemlist .items .item")))
    html = browser.page_source
    doc = PyQuery(html)
    items = doc('.m-itemlist .items  .item').items()
    foritem initems:
        product = {
            'image':item.find('.pic-link .img').attr('src'),
            'price':float(item.find('.price').text()[2:]),
            'deal':item.find('.deal-cnt').text()[:-3],
            'title':item.find('.title').text(),
            'shop':item.find('.shop').text(),
            'location':item.find('.location').text(),
            'keywords':KEYWORDS
        }
        save_to_mongo(product=product)

6、完整代码

#!/usr/bin/python
# -*- coding: utf-8 -*-

importpymongo
importre
frompyquery importPyQuery
fromselenium importwebdriver
fromselenium.webdriver.common.by importBy
fromselenium.webdriver.support.ui importWebDriverWait
fromselenium.webdriver.support importexpected_conditions asEC
fromselenium.common.exceptions importTimeoutException,NoSuchElementException
fromsetting import*

client = pymongo.MongoClient(MONGO_HOST)
db = client[MONGO_DB]
browser = webdriver.Chrome()
wait = WebDriverWait(browser,10)


# 根据关键字查询
def search():
    try:
        browser.get('https://www.taobao.com/')
        # 直到搜索框加载出
        input_search = wait.until(EC.presence_of_element_located((By.ID,'q')))
        # 直到搜索按钮可以点击
        submit_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'btn-search')))
        input_search.send_keys(KEYWORDS)
        submit_button.click()
        total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'div.wraper  div.total')))
        get_products()
        returntotal.text
    exceptTimeoutException ase:
        print('响应超时')


# 下一页爬取
def next_page(index):
    try:
        input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager div.form > input')))
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager div.form > span.btn.J_Submit')))
        input.clear()
        input.send_keys(index)
        submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(index)))
        get_products()
    exceptNoSuchElementException ase:
        print('元素未加载')
        returnnext_page(index)


# 获取一页上所有的商品
def get_products():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-itemlist .items .item")))
    html = browser.page_source
    doc = PyQuery(html)
    items = doc('.m-itemlist .items  .item').items()
    foritem initems:
        product = {
            'image':item.find('.pic-link .img').attr('src'),
            'price':float(item.find('.price').text()[2:]),
            'deal':item.find('.deal-cnt').text()[:-3],
            'title':item.find('.title').text(),
            'shop':item.find('.shop').text(),
            'location':item.find('.location').text(),
            'keywords':KEYWORDS
        }
        save_to_mongo(product=product)


# 保存至mongoDB
def save_to_mongo(product):
    try:
        ifdb[MONGO_TABLE].insert(product):
            print('保存成功', product)
    exceptException:
        print('保存失败')


# 中心调度
def main():
    try:
        total = search()
        total = int(re.compile('.*?(d+).*?').search(total).group(1))
        fori inrange(2,total+1):
            next_page(i)
    exceptException ase:
        print('异常')
    finally:
        browser.close()


if__name__=='__main__':
    main()





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

selenium练习实例 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • TestNG 测试套件(二)

    1 配置类 package com course testng suite import org testng annotations AfterMethod import org testng annotations AfterSuite
  • HTML 基础

    HTML 标题 HTML 标题 Heading 是通过 h1 h6 标签来定义的 实例 h1 这是一个标题 h1 h2 这是一个标题 h2 h3 这是一个标题 h3 尝试一下 HTML 段落 HTML 段落是通过标签 p 来定义的 实例 p
  • 分析师:芯片短缺至少还将持续一年

    众所周知 半导体行业对需求突然增加的反应很慢 一些分析家认为 现在芯片需求超过供应约30 要赶上需求将需要三到四个季度 从本质上讲 这意味着芯片短缺将一直持续到2022年 芯片需求正在蓬勃发展 如今 几乎所有电子设备中都装有芯片 因此对半导
  • 面试官:谈谈你对大数据平台架构的理解?

    笼统的来说 大数据的架构一共有五层 首先是数据源层 即最原始的数据层 数据在这一层里 还只是杂草地里的野菜 如果要问这片地的具体信息 目前来讲有三个地方 一个地方是企业内部自有数据 例如淘宝 京东等电商平台的用户信息 订单信息 商品信息等
  • 数字化转型成熟度模型介绍

    中关村信息技术和实体经济融合发展联盟提出了一种数字化转型成熟度模型系列标准 目前已经被众多央企采用 作为数字化转型战略框架和评价的依据 用友作为全球领先的数智化服务商 也参与了这一系列标准的制定 今天我们就来介绍一下这套成熟度模型 并讨论对
  • k8s基础概念:port ,targetport,nodeport

    在Kubernetes中 有三种类型的端口与Service相关 port targetPort和NodePort 它们分别用于不同的用途 port port字段定义了Service暴露给集群内部和外部的端口号 当你创建一个Service时
  • web前端职业规划(转)

    关于一个WEB前端的职业规划 其实是有各种的答案 没有哪种答案是完全正确的 全凭自己的选择 只要是自己选定了 坚持去认真走 就好 在这里 我只是简要说一下自己对于这块儿内容的理解 有一个观点想要分享给大家的是 任何规划和目标的实现都依赖于知
  • 矩阵连乘问题C++实现

    矩阵连乘问题C 1 认真审阅题目 明确题目的已知条件和求解的目标 2 问题建模 3 算法设计 4 编码实现 1 认真审阅题目 明确题目的已知条件和求解的目标 给定n个矩阵 A1 A2 A3 An 其中Ai与Ai 1 i 1 2 3 4 n
  • 从0到1带你构建——低代码开发入门案例

    个人简介 个人主页 前端杂货铺 学习方向 主攻前端方向 也会涉及到服务端 Node js 个人状态 在校大学生一枚 已拿多个前端 offer 秋招 未来打算 为中国的工业软件事业效力 n 年 推荐学习 前端面试宝典 Vue2 Vue3 Vu
  • 目标检测:锚点介绍及应用

    目标检测 锚点介绍及应用 介绍 应用 生成锚点图 步骤 锚点匹配 步骤 介绍 锚点相当于在待预测的特征数据上预设出可能的物体边界框 即预设出特征数据可能代表的物体区域 每个区域通常由两个属性构成 尺度 scale或size 和比例 rati
  • laravel实战项目搭建及代码管理

    本文目录 前言 一 安装laravel和装插件 1 1 安装laravel 1 2 安装开发插件 二 运行项目及配置 2 1 配置虚拟主机与绑定hosts文件 2 2 配置数据库连接 2 3 本地化配置 2 4 删除默认文件或目录 三 gi
  • 算法训练Day11

    目录 LeetCode232 用栈实现队列 1 思路 2 代码实现 3 复杂度分析 4 思考 LeetCode225 用队列实现栈 1 思路 2 代码实现 3 复杂度分析 4 思考 LeetCode20 有效的括号 方法一 使用栈和字典 1
  • Ubuntu18配置ssh免密登录

    安装配置 sudo apt get install openssh server cd ssh 若没有该目录 请先执行一次 ssh localhost ssh keygen t rsa 会有提示 都按回车就可以 cat id rsa pub
  • JSON注入与CSRF漏洞原理与复现

    JSON注入与CSRF漏洞原理与复现 1 JSON JavaScript Object Notation JavaScript对象表示法 2 它是一种数据格式 而不是一种编程语言 3 JSON的语法 有三种类型的值 简单值 对象 数组 关于
  • 【深度学习】 Python 和 NumPy 系列教程(十六):Matplotlib详解:2、3d绘图类型(2)3D散点图(3D Scatter Plot)

    目录 一 前言 二 实验环境 三 Matplotlib详解 1 2d绘图类型 2 3d绘图类型 0 设置中文字体 1 线框图 Wireframe Plot 2 3D散点图 3D Scatter Plot 一 前言 Python是一种高级编程
  • Qt for Android——关于版本的选择(ABI和CPU版本)

    1 前景介绍 之前在开发Qt for Android程序的时候 不知道如何选择套件的版本 乱选一通 经常是程序开发完 到了运行选择设备的时候告诉我设备不匹配 不支持这个ABI 下面就来讲讲这些版本 2 Qt中套件对应的版本 在我们安装Qt的
  • JTest

    接到parasoft公司一位先生打来的电话 说下个月第二周到上海来 希望顺便给我们组培训一下JTest和C Test的使用 我是用java的 自然对JTest更感兴趣一些 上网一搜 原来JTest这么出名 自己的确孤陋寡闻了 看了一下价格
  • 如何下载微信支付证书(API证书)

    一 登录微信商户平台 1 商户平台登陆网址 微信支付 中国领先的第三方支付平台 微信支付提供安全快捷的支付方式http pay weixin qq com 2 登录方式 扫码登录登录 二 进入微信商户平台下载证书 1 点击账户中心 账户设置
  • Vue简易登陆页面

    目录 1 效果展示 2 Vue代码 3 存点图片 1 效果展示 2 Vue代码
  • selenium练习实例

    1 项目流程 2 中心调度 中心调度 defmain try total search total int re compile d search total group 1 fori inrange 2 total 1 next page