python—selenium爬虫

文章目录

  • Selenium与Requests对比
    • 一、工作原理
    • 二、功能特点
    • 三、性能表现
  • 下载对应驱动
    • 1.首先我们需要打开edge浏览器,打开设置,找到“关于Microsoft Edge”,点击进入查看浏览器版本。
    • 2.查找版本之后,搜索edge驱动下载,进入下载页面,选择对应的版本下载就可以。
  • 使用Selenium爬取脚本实例
    • 1.导入必要的库和模块:
    • 2.设置Edge浏览器的无头模式:
    • 3.初始化Edge WebDriver:
    • 4.访问网页:
    • 5.等待页面元素加载:
    • 6.查找并遍历列表元素:
    • 7.关闭浏览器:

Selenium爬虫与Requests在多个方面存在显著差异,这些差异主要体现在它们的工作原理、功能特点、适用场景以及性能表现上。在某些情况下,我们使用Selenium爬取文本内容更好,这里我们先将其与Requests进行对比。

Selenium与Requests对比

一、工作原理

Requests:

  • Requests是一个HTTP库,用于发送各种HTTP请求(如GET、POST等)。
  • 它直接发送HTTP请求到服务器,并接收服务器的响应,不涉及浏览器环境的模拟。
    Selenium:
  • Selenium是一个自动化测试工具,通过控制浏览器来模拟用户的各种行为,如点击、滚动、填写表单等。
  • 它通过浏览器驱动程序与浏览器进行交互。

二、功能特点

Requests:

  • 简单、快速、轻量级,易于使用和集成。
  • 主要用于发送HTTP请求和接收响应,适用于静态网页内容的抓取。
  • 不具备浏览器自动化功能。

Selenium:

  • 功能强大,能够模拟用户与浏览器的所有交互行为。
  • 适用于动态网页、单页面应用(SPA)以及需要用户交互的网页内容的抓取。

三、性能表现

Requests:

  • 由于不加载JavaScript或CSS等资源,响应时间更短,资源消耗更少。
  • 在处理静态网页内容时,性能表现优异。

Selenium:

  • 需要加载完整的页面资源,因此速度相对较慢。
  • 占用更多的CPU和内存资源,特别是在处理多个浏览器实例或并发请求时。
    综上所述,Selenium爬虫与Requests在多个方面存在显著差异。选择哪个工具取决于具体的项目需求、网页类型以及性能要求。对于简单的静态网页内容抓取,Requests可能是更合适的选择;而对于复杂的动态网页、需要用户交互的网页或Web应用程序的抓取,Selenium则更具优势。

下载对应驱动

在使用Selenium之前,我们需要先下载对应浏览器的驱动程序(如 Edge 驱动程序)来与浏览器进行交互。下面我们讲解如何安装驱动。

1.首先我们需要打开edge浏览器,打开设置,找到“关于Microsoft Edge”,点击进入查看浏览器版本。

图例:
在这里插入图片描述

2.查找版本之后,搜索edge驱动下载,进入下载页面,选择对应的版本下载就可以。

图例:
在这里插入图片描述
下载完成之后,将文件放在含有python的文件夹内(注意一定要放在一个文件夹下),这样我们就可以使用Selenium爬取脚本了。

使用Selenium爬取脚本实例

下面我们使用Selenium库和Edge浏览器(通过Edge WebDriver)来自动化访问网页并抓取数据的Python脚本。

1.导入必要的库和模块:

import time# pip install selenium
# 下载对应版本的驱动 放在python文件下from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.edge.options import Options
  • time:用于在代码执行过程中添加延时。
  • webdriver从selenium包中导入,用于控制浏览器。
  • By从selenium.webdriver.common.by中导入,用于指定元素定位的方式(如XPath、CSS选择器等)。
  • expected_conditions(别名EC)和WebDriverWait从selenium.webdriver.support和selenium.webdriver.support.ui中导入,用于设置等待条件,以便在元素可用之前暂停执行。
  • Options从selenium.webdriver.edge.options中导入,用于配置Edge浏览器的启动选项,如设置为无头模式。

2.设置Edge浏览器的无头模式:

if __name__ == '__main__':# 无头模式opt = Options()opt.add_argument("--headless")
  • 创建Options实例,并通过add_argument(“–headless”)设置浏览器在无头模式下运行,即不显示浏览器界面。

3.初始化Edge WebDriver:

    driver = webdriver.Edge(options=opt)
  • 使用webdriver.Edge(options=opt)创建Edge WebDriver实例,传入之前配置的选项opt。

4.访问网页:

    # 请求页面driver.get('https://101.qq.com/#/hero')
  • 使用driver.get(‘https://101.qq.com/#/hero’)访问指定的网页地址。

5.等待页面元素加载:

    # 强制等待time.sleep(10)# 等待某个元素加载完成WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,"//ul[@class='hero-list']")))
  • 使用WebDriverWait和EC.presence_of_element_located等待页面上某个元素(这里是类名为hero-list的ul元素)出现。这是一种比time.sleep()更智能的等待方式,因为它会等待直到条件满足(元素出现)或达到最大等待时间(这里是10秒)。

6.查找并遍历列表元素:

    li_list = driver.find_elements(By.XPATH,"//ul[@class='hero-list']/li")for li in li_list:img_url = li.find_element(By.XPATH,"div/div/img").get_attribute("src")hero_name = li.find_element(By.XPATH,"div/p").textprint(img_url,hero_name)
  • 使用find_elements方法通过XPath定位到ul[@class=‘hero-list’]下的所有li元素,并将它们存储在li_list列表中。
  • 遍历li_list中的每个li元素,对于每个元素:
  • 使用find_element和XPath定位到该li元素内的img标签,并获取其src属性(即图片URL)。
  • 同样地,定位到该li元素内的p标签,并获取其文本内容(即英雄名称)。
  • 打印出图片URL和英雄名称。

7.关闭浏览器:

    driver.close()pass
  • 使用driver.close()关闭浏览器。
    这段代码演示了如何使用Selenium和Edge WebDriver来自动化访问一个网页,等待页面上的特定元素加载完成,然后抓取该页面上特定列表项中的图片URL和文本内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/49317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

群管机器人官网源码

一款非常好看的群管机器人html官网源码 搭建教程: 域名解析绑定 源码文件上传解压 访问域名即可 演示图片: 群管机器人官网源码下载:客户端下载 - 红客网络编程与渗透技术 原文链接: 群管机器人官网源码

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯

STM32CUBEIDE FreeRTOS操作教程(一):LED闪灯 STM32CUBEIDE(不是STM32CUBEMX)开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件,不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F401RCT6开…

PCB工艺边设计准则

在PCB设计时,通常会在电路板的边缘预留一定的空间,这部分空间被称为工艺边。它有助于在生产过程中确保电路板的尺寸和形状的准确性。以使得组装时更加顺畅、便捷。而工艺边的加工,使得线路板上的元件可以精准地与设备对接,从而提高…

leetcode6 -- z字形变换

题目描述: 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H N A P L S I I G Y I R 之后&#xff…

springboot系列十一:Thymeleaf

文章目录 官方文档基本介绍Thymeleaf机制说明Thymeleaf语法表达式运算符th属性迭代条件运算使用Thymeleaf th属性需要注意点 Thymeleaf综合案例需求说明思路分析代码实现 作业布置 官方文档 在线文档: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 离线…

DNS域名管理系统、搭建DNS服务

1.DNS概述 1.DNS(domain name system ) 域名管理系统 域名: 由特定的格式组成,⽤来表示互联⽹中某⼀台计算机或者计算机组的名称,能够使⼈更⽅便的访问互联⽹,⽽不⽤记住能够被机器直接读取的IP地址。 计算…

C++:模板(函数模板,类模板)

目录 泛型编程 函数模板 函数模板格式 函数模板的原理 函数模板的实例化 类模板 类模板格式 类模板实例化 模板分为函数模板和类模板 在C中使用模板可以让我们实现泛型编程 泛型编程 如果我们需要实现一个加法add函数,那么会怎么实现呢? int…

python 闭包、装饰器

一、闭包: 1. 外部函数嵌套内部函数 2. 外部函数返回内部函数 3.内部函数可以访问外部函数局部变量 闭包(Closure)是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的局部变量,即使外部函数已经执行…

Python Formulas模型以JSON格式文件导出导入

1. 导入formulas和json包 在加载模型之前,导入formulas和json包。 import formulas, json2. 加载Excel模型 加载一个公式复杂的Excel模型,该模型耗时较长,我们可以观察使用json格式是否能更高效。 xl_model formulas.ExcelModel().load(…

oracle 基础知识表的主键

一、表的约束条件 •约束条件是施加在表的字段上的一组限制条件,它使得只有符合限制条件要求的数据才能输入表。 •保证了表中的数据的正确性 i.约束条件包括了:非空和唯一和核对,即not null 和unique 和check null的含义:不确定 3个人去捡苹…

重磅 - Github 上免费大屏来啦,教你快速搭建积木报表

先看看大屏效果 JimuReport积木报表的集成版本,已经提供了免费数据可视化设计工具。 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表和门户设计;目前支持多种图表类型:柱形图、折线图、散点图、饼图、环形图、面积图、漏斗…

Java基础巩固 -- 面向对象

Java基础巩固 – 面向对象 简介:博主本人由于在毕业前忙于找工作,因此选择了Java后端开发,但学习过程比较碎片化,并没有进行系统性学习。本章博客将会系统性重温Java的一些基础知识和概念。 1.面向对象 1.1 概念 面向对象是一…

微服务概念篇-服务提供者/服务消费者

微服务概念篇-服务提供者/服务消费者 提示:以下是本篇文章正文内容,下面案例可供参考 一、服务提供者是什么? 提供接口给其他微服务进行调用的服务称之为服务提供者 二、服务消费者是什么? 调用其他服务的接口的服务称之为服务消费者 三…

学习网络系统的心得体会

网络系统 零拷贝 磁盘是计算机系统中读写速度最慢的的硬件之一,而零拷贝技术是用于提高文件传输性能的,通过减少上下文切换次数与数据拷贝的次数从而提高传输性能。 操作系统中IO的流程 大体流程 收到IO请求由用户态切换到内核态,CPU发送…

【vueUse库Time模块各函数简介及使用方法--全篇】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseTime函数1. useDateFormat…

# Redis 入门到精通(七)-- redis 删除策略

Redis 入门到精通(七)-- redis 删除策略 一、redis 删除策略–过期数据的概念 1、Redis 中的数据特征 Redis 是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态。 XX :具有时效性…

Linux下git入门操作

0.创建仓库 可以按这个配置来,.gitignore中存放了上传时忽略的文件类型后缀。 1.clone仓库 在gitee上创建好仓库,点击克隆/下载, 复制地址fyehong/Linux_notes 。 在所需的文件夹中放置仓库。比如我在文件夹lesson9下存储仓库。就在less…

C# 与C++ cli

cli CLI(Command Line Interface)是一种通过命令行界面与计算机系统进行交互的方式。它提供了一种以文本形式输入命令和接收系统输出的方法,用于执行各种操作和管理计算机系统。以下是CLI的详细解释: 一、定义与基本概念 定义&…

Linux系统下的DevOps工具链:从CI到CD

Linux系统下的DevOps工具链覆盖了从持续集成(CI)到持续部署(CD)的全过程,以下是关键环节及其常用工具: 1.版本控制 (SCM) •Git: 管理代码版本,分支合并,是DevOps流程的基础。 2.…

Android中Intent和IntentFilter

目录 一 概述二 使用2.1 显式调用2.2 隐式调用2.3 IntentFilter三个属性2.3.1 action2.3.2 catagory2.3.3 data 一 概述 intent是意图,intentFilter是意图过滤器。使用intent,可以启动activity、service、broadcastReceiver等。 二 使用 2.1 显式调用…