selenium模拟登录爬取多页面vivio手机信息

2023-11-16

selenium模拟登录爬取多页面vivio手机信息,xpath进行数据解析,最终追加保存为csv形式

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from lxml import etree
import pandas as pd
import time
import os

#selinum通过搜索进入手机信息页面
def login(url):
    driver.get(url)
    driver.maximize_window()
    # 点击搜索框
    search_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[@class="vp-head-search"]')))
    search_btn.click()
    # 输入需要爬取的商品信息并再次搜索
    search_btm = wait.until(EC.element_to_be_clickable((By.XPATH, '//div[@class="vp-head-search-input"]/input')))
    search_btm.click()
    search_btp = wait.until(EC.presence_of_element_located((By.XPATH, '//div[@class="vp-head-search-input"]/input')))
    search_btp.send_keys('手机')
    search_btq = wait.until(EC.element_to_be_clickable((By.XPATH, '//span[@class="vp-head-search-confirm"]')))
    search_btq.click()
    time.sleep(5)
    return driver.page_source


# 通过点击下一页按钮,获取出第1页外其它页网页源代码
def get_next_page():
    # 将滚动条拖动至页面底端,使下一页按钮显露出来
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
    # 查找下一页按钮
    next_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'pagingR')))
    # 单击按钮
    next_button.click()
    time.sleep(5)
    return driver.page_source

def parse_page(html):
    dom = etree.HTML(html)
    # 商品名称
    name = dom.xpath('//div[@class="itemTitle"]/span[1]/text()')
    print(name)
    print(len(name))
    # 商品价格
    money = dom.xpath('//div[@class="itemTitle"]/span[2]/text()')
    print(money)
    print(len(name))
    # 商品概述
    info = dom.xpath('//div[@class="itemText"]/text()')
    print(info)
    print(len(name))
    data = pd.DataFrame({
        '商品名称':name,
        '商品价格':money,
        '商品概述':info
    })
    return data
#每页数据以追加形式保存至csv文件
def save_file(data): #参数为DataFrame
    columns = ['商品名称','商品价格','商品概述']
    filename = 'vivo手机与手机配件信息.csv'
    if os.path.exists(filename):
        data.to_csv(filename,mode='a',encoding='utf_8_sig',columns=columns,index=False,header=False)
    else:
        data.to_csv(filename,mode='a',encoding='utf_8_sig',columns=columns,index=False)
    print("保存成功!")

if __name__ == '__main__':
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver, 10)
    url = "https://vivo.com.cn/"
    #获取手机页面
    html = login(url)
    # 获取手机信息
    for i in range(1, 8):
        if i != 1:  #不是第一页
            html = get_next_page()
        data = parse_page(html)
        print(data)
        save_file(data)
        print("手机的第{}页爬取完成!".format(i))
    #selinum点击配件按钮跳转到手机配件
    search_btn = wait.until(EC.element_to_be_clickable((By.ID, 'tab_contentAccessories')))
    search_btn.click()
    #获取手机配件信息
    for i in range(1, 10):
        if i != 1:  # 不是第一页
            html = get_next_page()
        data = parse_page(html)
        print(data)
        save_file(data)
        print("配件的第{}页爬取完成!".format(i))
    driver.close()

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

selenium模拟登录爬取多页面vivio手机信息 的相关文章

随机推荐

  • element-ui el-dialog如何设置响应式宽高且永远水平垂直居中

    写在前面 el dialog是使平常使用element ui比较常用的一个组件 想要灵活控制它达到想要的开发效果 就必须要熟悉它默认一些属性 默认width 50 高度为标题和el dialog body el dialog footer内
  • 区块链-一些基本概念

    Hash collision resistance collision free 是说在密码学中 对于一个hash函数 很难找到两个不同的输入使得其hash之后的输出是一样的 Collision resistance is a proper
  • 两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

    本套模板非常适合生活类 两性类 减肥类等等类型的网站 这类型网站比较好做流量 因为客户群体众多 可以自行改内容为其他类型网站模板总体非常简洁漂亮 配色合理 视觉舒服 并且配合强大的帝国cms7 5核心 未来做大站真心很适合 也可以用来做站群
  • Redis Day02 - springBoot更改Redis默认序列化方式

    默认jdkSerializeable序列化后cli显示 xac xed x00 x05t x00 bcustomer 此刻在cli中get customer 为nil 为避免这种情况的出现 可自行修改序列化方式 只需在启动类自定义序列化类r
  • .yml文件_【玩转SpringBoot】配置文件yml的正确打开姿势

    作者 编程新说李新杰 出自 微信公众号 编程新说 原文 玩转SpringBoot 配置文件yml的正确打开姿势 序言 在很久以前 Spring的配置文件是基于XML的 它的名字就是applicationContext xml 没错 就只有这
  • 渗透测试常用浏览器插件汇总

    1 shodan 这个插件可以自动探测当前网站所属的国家 城市 解析IP地址以及开放的服务和端口 包括但不限于FTP DNS SSH或者其他服务等 属被动信息搜集中的一种 2 hackbar 收费之后用Max Hackerbar代替 这个插
  • 从零开始探索C语言(八)----指针

    文章目录 1 什么是指针 2 如何使用指针 3 NULL 指针 4 指针的算术运算 5 指针数组 6 指向指针的指针 7 传递指针给函数 8 从函数返回指针 有人说 指针是C语言的灵魂 所以学习C语言 学习指针是很有必要的 通过指针 可以简
  • Servlet执行原理和API详解---【创建Servlet项目】

    目录 一 Servlet 是什么 主要工作 第一个Servlet项目 编写代码 打包程序 一 Servlet 是什么 Servlet 是一款基于HTTP协议 用来开发Java Web 运行在Tomcat里面的里的框架技术 一种实现动态页面的
  • 微信抖音的服务器,抖音微信登陆未获得权限怎么办

    摘要 腾兴网为您分享 钉钉 苹果手机 ios系统 闲聊app 唱吧app等知识经验教程 欢迎大家关注腾兴网 抖音微信登陆未获得权限是很多小伙伴们遇到的 因此想要知道这个该怎么解决 不知道解决办法的小伙伴们 就让小编给大家详细的讲讲 一起来看
  • 【MySQL小白之路】数据的更新与删除

    MySQL小白之路 数据的更新与删除 数据更新 关键字 UPDATE 所需信息 1 需更新的表名 2 需更新的列名与更新值 3 锁定更新行的过滤条件 样例 以下为表的定义 student表 stu id int NOT NULL PRIMA
  • Shiro 如何对Jsp页面标签授权呢?

    转自 Shiro 如何对Jsp页面标签授权呢 下文笔者讲述jsp页面标签授权的方法分享 如下所示 shiro中使用Jsp页面标签授权首先需要导入标签库 常见的Shiro标签
  • 1025 反转链表

    给定一个常数 K 以及一个单链表 L 请编写程序将 L 中每 K 个结点反转 例如 给定 L 为 1 2 3 4 5 6 K 为 3 则输出应该为 3 2 1 6 5 4 如果 K 为 4 则输出应该为 4 3 2 1 5 6 即最后不到
  • Python3 - 实现邮件的发送

    目录 一 使用SMTP模块发送邮寄 二 发送HTML格式右键 三 发送带附件的邮件 四 Django处理邮件的发送 4 1 settings配置 4 2 授权码的获取 4 3 视图函数 4 4 群发邮件 一次发送多份 4 5 携带附件或发送
  • Gitee的使用

    一 window环境下的使用 1 在window系统下创建一个文件 这里在电脑的F盘下创建gitee文件夹 打开Git Bash窗口 进入这个文件夹中 2 使用git init进行初始化 3 信息的配置 去掉 global 之后 操作只对本
  • 静态代码检查 - SourceInsight_Scan 使用说明

    SourceInsight Scan是一款集成在 SourceInsight 中的c c 代码静态分析插件 集成了cppcheck coverity pclint等业界优秀的静态分析工具的优点 旨在帮助开发人员 在IDE中快速发现编译器无法
  • 设计模式(六)适配器模式

    前面介绍的几种设计模式都是创建型模式 用于以不同的方式创建对象 下面我们来看看适配器模式 这是一种结构型模式 用于在两个无关的接口之间搭建桥梁 适配器模式主要用于在新旧代码直接转换 直接看例子吧 假设我们有一个音乐播放器 public in
  • 这些年我用过的软件

    文章目录 1 uTools 2 BCompare 3 Wireshare 4 Postman 5 Sourcetree 6 Another Redis Desktop Manager 7 XMind 8 逍遥模拟器 9 ScreenToGi
  • JavaScript的执行机制

    JavaScript的执行机制 在理解JavaScript 以下简称js 的执行机制之前 先要理解几个概念 js是单线程语言 为什么要将js设计为单线程 原因是js最初是专门为浏览器设计的 可以想象一下 如果js是多线程的 那么当你对同一个
  • Atom 和 markdown 基本使用

    Atom 和 markdown 基本使用 Atom 常用的快捷键 Cmd Shift P 打开命令窗口 可以运行各种菜单功能 Cmd T 快速的多文件切换 Ctrl G 文件内跳转到指定行 Cmd F 文件内查找和替换 Cmd Shift
  • selenium模拟登录爬取多页面vivio手机信息

    selenium模拟登录爬取多页面vivio手机信息 xpath进行数据解析 最终追加保存为csv形式 from selenium import webdriver from selenium webdriver common by imp