python爬虫-----Selenium (第二十二天)

news2024/11/17 23:45:57

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

目录

一、什么是Selenium

二、为什么使用selenium?

三、python爬虫selenium知识点

1、安装 Selenium:使用 pip 安装 Selenium 库。

2、下载浏览器驱动

3、创建 WebDriver 实例

4、访问网页:使用 WebDriver 实例打开要访问的网页。

6、元素操作

7、等待页面加载:

8、获取页面数据

9、解析页面数据


使用 Selenium,我们可以模拟用户在浏览器中的操作,比如点击按钮、填写表单、下拉滚动条等,从而可以访问那些通过传统的 HTTP 请求无法获取到的数据,比如使用 JavaScript 动态加载的内容。

在本次学习中,我们将学习如何安装 Selenium 库,下载浏览器驱动程序(如 ChromeDriver、GeckoDriver 等),创建 WebDriver 实例来控制浏览器,访问网页并获取页面数据,查找页面元素并进行操作,等待页面加载完成,最后使用 BeautifulSoup 或其他库解析页面数据,提取我们需要的信息。

通过学习 Selenium,你将能够扩展你的网页爬取技能,处理更加复杂的网页结构和交互逻辑,让你的爬虫更加强大和智能。

总共有十九个知识点,今天我们先看前九个,明天后十个。

一、什么是Selenium

hello,兄弟姐妹们!在 Python 爬虫学习的第二十二天,我们将深入学习如何使用 Selenium 这一强大的工具进行网页数据提取。Selenium 是一个自动化测试工具,但也可以用于网页爬取,特别是需要模拟用户操作的情况下非常有用。

Selenium 是一个用于自动化 web 应用程序测试的工具,它可以模拟用户在浏览器中的操作,比如点击按钮、填写表单、提交数据等。Selenium 测试可以直接在浏览器中运行,就像真正的用户在操作一样,这样可以更真实地模拟用户的行为。

Selenium 支持通过各种 WebDriver 驱动真实浏览器完成测试,包括 FirefoxDriver、InternetExplorerDriver、OperaDriver、ChromeDriver 等。这些驱动程序可以启动相应的浏览器,并且可以通过编程方式控制浏览器的行为,从而实现自动化测试。

此外,Selenium 也支持无界面浏览器操作,比如使用 Headless Chrome 或者 PhantomJS,这样可以在不显示实际浏览器界面的情况下进行测试,节省资源并加快测试速度。

二、为什么使用selenium?

  1. 处理动态网页:有些网站使用 JavaScript 动态生成内容,传统的爬虫库如 urllib、requests 无法获取到动态生成的内容,而 Selenium 可以模拟浏览器行为,获取到完整的页面内容。
  2. 模拟用户操作:有些网站对于频繁请求会进行反爬虫处理,使用 Selenium 可以模拟人类用户的操作行为,如点击、滚动等,降低被识别为爬虫的概率。
  3. 解决验证码:有些网站会使用验证码来防止爬虫,Selenium 可以通过图像识别等方式自动识别验证码,实现自动化爬取。
  4. 跨平台支持:Selenium 支持多种浏览器和操作系统,可以在不同环境下运行,更加灵活。
  5. 强大的定制能力:Selenium 提供了丰富的 API,可以实现各种复杂的操作和定制需求,满足不同爬虫场景的需求。
  6. 动态加载内容:有些网页内容是通过 AJAX 或其他异步加载方式获取的,Selenium 可以等待页面完全加载后再进行内容提取,确保获取到完整的页面数据。

总的来说,使用 Selenium 可以帮助爬虫程序处理更复杂的网页,提高爬取效率和成功率,适用于对动态网页内容感兴趣的爬虫任务。

三、python爬虫selenium知识点

1、安装 Selenium:使用 pip 安装 Selenium 库。

安装 Selenium 库,可以使用 Python 的包管理工具 pip。如果你还没有安装 pip,可以参考官方文档进行安装:Installation - pip documentation v24.0)(pycharm中自带的有)

安装 Selenium 的步骤如下:

(1)打开命令行或终端。(pycharm中的terminal中输入命令)

运行以下命令安装 Selenium:


pip install selenium

等待安装完成。安装完成后,你就可以在 Python 中使用 Selenium 了。

如果需要安装特定版本的 Selenium,可以使用类似以下的命令:


pip install selenium==3.141.0

这将安装 Selenium 的 3.141.0 版本。你也可以根据需要安装其他版本。

2、下载浏览器驱动

使用 Selenium 需要下载相应的浏览器驱动,以便 Selenium 能够控制浏览器。不同的浏览器需要使用对应的驱动程序,例如 Chrome 需要 chromedriver,Firefox 需要 geckodriver。

以下是下载浏览器驱动的一般步骤:

(1)确定浏览器版本:首先确定你需要使用的浏览器版本,例如 Chrome 的版本是多少。

(2)下载对应版本的驱动程序:访问对应浏览器驱动的官方网站下载页面,下载对应浏览器版本的驱动程序。以下是一些常见浏览器的驱动下载页面:

  • Chrome: ChromeDriver
  • Firefox: GeckoDriver
  • Edge: EdgeDriver

(3)将驱动程序添加到系统 PATH:下载完成后,将驱动程序所在目录添加到系统的 PATH 环境变量中,这样 Selenium 就能找到驱动程序。

(4)使用正确的驱动程序:在创建 WebDriver 实例时,指定正确的驱动程序。例如,使用 Chrome 驱动程序创建 Chrome 浏览器的 WebDriver 实例:


from selenium import webdriver

# 指定 Chrome 驱动程序路径
driver = webdriver.Chrome(executable_path='/path/to/chromedriver')

# 打开网页
driver.get('<https://www.example.com>')

# 关闭浏览器
driver.quit()

通过以上步骤,你就可以下载并配置好浏览器驱动,以便使用 Selenium 控制浏览器进行网页操作。

3、创建 WebDriver 实例

要创建 WebDriver 实例来控制浏览器,需要先导入 webdriver 模块,然后根据要使用的浏览器类型创建相应的 WebDriver 实例。以下是使用 Selenium 创建 WebDriver 实例的示例代码:


from selenium import webdriver

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 创建其他浏览器实例的方法可以根据需要选择相应的驱动程序和参数

在上面的示例中,我们通过调用 webdriver.Chrome()webdriver.Firefox() 等方法来创建不同浏览器类型的 WebDriver 实例。然后,我们可以使用这些实例来控制相应的浏览器进行网页操作。

4、访问网页:使用 WebDriver 实例打开要访问的网页。

要使用 WebDriver 实例打开要访问的网页,可以使用 WebDriver 实例的 get() 方法,并传入要访问的网页的 URL。以下是一个示例代码,演示如何使用 Selenium 打开网页:


from selenium import webdriver

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get('<https://www.example.com>')

# 关闭浏览器
driver.quit()

在这个示例中,我们首先创建了一个 Chrome 浏览器的 WebDriver 实例。然后,使用 get() 方法打开了 Example Domain 这个网页。最后,使用 quit() 方法关闭了浏览器。你可以将 URL 替换为你要访问的网页的 URL。

5、查找元素:使用 WebDriver 提供的方法查找页面元素

使用 Selenium 中的 WebDriver 实例,可以通过各种方法查找页面元素,例如根据元素的 XPath、CSS 选择器、ID 等属性。以下是一些常用的查找元素的方法:

(1)根据 ID 查找元素

element = driver.find_element_by_id('element_id')

(2)根据 class 名称查找元素

element = driver.find_element_by_class_name('class_name')

(3)根据标签名查找元素

element = driver.find_element_by_tag_name('tag_name')

(4)根据 CSS 选择器查找元素

element = driver.find_element_by_css_selector('css_selector')

(5)根据 XPath 查找元素

element = driver.find_element_by_xpath('xpath_expression')

(6)查找多个元素:如果要查找多个元素,可以使用 find_elements_* 方法,例如:

elements = driver.find_elements_by_xpath('xpath_expression')

这些方法可以用于查找页面上的各种元素,如文本框、按钮、链接等。找到元素后,就可以对其进行操作,比如点击、输入文本等。

6、元素操作

对查找到的元素进行操作是使用 Selenium 进行网页自动化的核心部分。一旦找到页面元素,就可以对其执行各种操作,比如点击链接、填写表单、提交数据等。以下是一些常用的元素操作示例:

(1)点击元素

element.click()

(2)输入文本

element.send_keys('text_to_input')

(3)清空输入框

element.clear()

(4)提交表单

form_element.submit()

(5)获取元素文本


text = element.text

(6)获取元素属性

pythonCopy code
attribute_value = element.get_attribute('attribute_name')

(7)模拟鼠标操作(需要导入 ActionChains):


from selenium.webdriver.common.action_chains import ActionChains

# 鼠标移动到元素上
ActionChains(driver).move_to_element(element).perform()

# 鼠标右键点击元素
ActionChains(driver).context_click(element).perform()

(8)模拟键盘操作(需要导入 Keys):

from selenium.webdriver.common.keys import Keys

# 模拟按下回车键
element.send_keys(Keys.ENTER)

这些操作可以让你在自动化测试或网页爬虫中与页面元素进行交互,实现各种功能。

7、等待页面加载

等待页面加载是使用 Selenium 进行网页自动化测试和爬取的重要步骤之一。在页面加载过程中,有时会出现网络延迟或异步加载的情况,为了确保页面的所有元素都已加载完成,需要使用等待机制。

Selenium 提供了两种等待方式:显式等待和隐式等待。

(1)显式等待:在代码中明确指定等待条件,直到条件满足或超时才继续执行后续操作。可以使用 WebDriverWait 类结合 expected_conditions 模块来实现。例如,等待页面标题包含特定文本:


from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 设置最长等待时间为10秒
wait = WebDriverWait(driver, 10)
# 等待直到标题包含"example"
wait.until(EC.title_contains("example"))

(2)隐式等待:在创建 WebDriver 实例后,设置一个全局的等待时间,当查找元素或执行操作时,如果找不到元素或操作耗时超过设置的等待时间,将等待一段时间再继续执行。例如:

driver.implicitly_wait(10)  # 设置隐式等待时间为10秒

在使用等待机制时,应根据实际情况合理设置等待时间,避免等待时间过长导致效率低下,或等待时间过短导致操作失败。

8、获取页面数据

要获取页面的 HTML 源码,可以使用 WebDriver 实例的 page_source 属性。这个属性可以让你获取当前页面的完整 HTML 内容,然后你可以使用解析库(如 BeautifulSoup)来解析和提取所需的信息。以下是一个示例代码:

pythonCopy code
from selenium import webdriver

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get('<https://www.example.com>')

# 获取页面的 HTML 源码
html_source = driver.page_source

# 关闭浏览器
driver.quit()

# 打印页面的 HTML 源码
print(html_source)

在这个示例中,我们首先创建了一个 Chrome 浏览器的 WebDriver 实例,然后使用 get() 方法打开了 Example Domain 这个网页。接着,使用 page_source 属性获取了页面的 HTML 源码,并将其打印出来。最后,使用 quit() 方法关闭了浏览器。

9、解析页面数据

解析页面数据是使用 Selenium 进行网页爬取的重要步骤之一。一旦获取到页面的 HTML 源码,就可以使用解析库(如 BeautifulSoup)来解析并提取所需的信息。以下是一个示例代码,演示如何使用 BeautifulSoup 解析页面数据:

pythonCopy code
from selenium import webdriver
from bs4 import BeautifulSoup

# 创建一个 Chrome 浏览器实例
driver = webdriver.Chrome()

# 打开网页
driver.get('<https://www.example.com>')

# 获取页面的 HTML 源码
html_source = driver.page_source

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(html_source, 'html.parser')

# 查找页面中的标题元素
title_element = soup.find('title')

# 输出标题文本
if title_element:
    print('Page Title:', title_element.text.strip())
else:
    print('Title element not found')

# 关闭浏览器
driver.quit()

在这个示例中,我们首先创建了一个 Chrome 浏览器的 WebDriver 实例,然后使用 get() 方法打开了 Example Domain 这个网页。接着,使用 page_source 属性获取了页面的 HTML 源码,并将其传递给 BeautifulSoup 解析。然后,我们使用 BeautifulSoup 的 find() 方法查找页面中的标题元素,并输出标题文本。最后,使用 quit() 方法关闭了浏览器。

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

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

相关文章

设计模式系列:责任链模式

简介 责任链模式是一种行为型设计模式&#xff0c;它允许你将请求沿着处理者链进行发送。每个处理者都可以对请求进行处理&#xff0c;或者将其传递给链上的下一个处理者。责任链模式主要应用于面向对象编程中&#xff0c;特别是当系统中的对象需要根据其属性来决定如何处理请…

Python程序设计 二维列表

教学案例九 二维列表 1. 成绩文件的读取 score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下 编写程序&#xff0c;将文件score.csv文件中的数据放入二维列表cjlb中(注意&#xff1a;语文、数学、英语成绩要转换为数值类型) f1open("lbk…

ASP.NET基于BS的计算机等级考试系统的设计与实现

摘 要 随着计算机技术的发展及计算机的日益普及&#xff0c;基于B/S结构的考试系统与无纸化办公一样已成为大势所趋。论文详细论述了一个基于B/S结构的计算机等级考试系统的设计过程。软件采用ASP.NET 2005作开发平台&#xff0c;C#作编程语言&#xff0c;SQL Server 2005作…

sheng的学习笔记-AI-决策树(Decision Tree)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是决策树 划分选择 信息增益 增益率 基尼指数 剪枝处理 预剪枝 后剪枝 连续值处理 另一个例子 基本步骤 排序 计算候选划分点集合 评估分割点 每个分割点都进行评估&#xff0c;找到最大信息增益的…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器&#xff1a;主要用于HDMI线的延长&#xff0c;有HDMI对接头方式延长&#xff0c;或HDMI公头加HDMI母头的HDMI线进行延长&#xff0c;或通过网线方式延长&#xff0c;早期为双网线&#xff0c;目前已发展为单网线&#xff0c;需要注意的是&#xff0…

ChatGPT-4 Turbo 今天开放啦!附如何查询GPT-4 是否为 Turbo

2024年4月12日&#xff0c;OpenAI在X上宣布GPT-4 Turbo开放了&#xff01;提高了写作、数学、逻辑推理和编码方面的能力。另外最重要的是&#xff0c;响应速度更快了&#xff01;&#xff01; ChatGPT4 Turbo 如何升级&#xff1f;解决国内无法升级GPT4 Turbo的问题&#xff0…

【数据结构】泛型(分享重点)

什么是泛型&#xff1f; 泛型就是适用于许多许多类型&#xff0c;对类型参数化。 怎么创建一个泛型呢 class 泛型类名称<类型形参列表> { // 这里可以使用类型参数 } class ClassName<T1, T2, ..., Tn> { } class 泛型类名称<类型形参列表> extends 继承类…

消息中间件Kafka分布式数据处理平台

目录 一.Kafka基本介绍 1.定义 2.特点 &#xff08;1&#xff09;高吞吐量、低延迟 &#xff08;2&#xff09;可扩展性 &#xff08;3&#xff09;持久性、可靠性 &#xff08;4&#xff09;容错性 &#xff08;5&#xff09;高并发 3.系统架构 &#xff08;1&#…

oracle 19c 主备 补丁升级19.22

补丁升级流程 备库升级 备库备份$ORALCE_HOME du -sh $ORACLE_HOME ​​​​​​​ 备份目录将dbhome_1压缩 cd $ORACLE_HOME cd .. Ls tar -cvzf db_home.tar.gz db_home_1 /opt/oracle/product/19c ​​​​​​​​​​​​​​ 关闭监听关闭数据库查看sq…

【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境

【VS2019】x64 Native Tools Command Prompt for Vs 2019使用conda命令进入环境 安装完VS2019后&#xff0c;打开终端x64 Native Tools Command Prompt for Vs 2019&#xff0c;直接运行conda会出现‘conda’ 不是内部或外部命令&#xff0c;也不是可运行的程序 原因分析&am…

【Java虚拟机】三色标记、增量更新、原始快照、记忆集与卡表

三色标记、增量更新、原始快照、记忆集与卡表 三色标记基本原来错标、漏标错标漏标 增量更新基本原理写屏障 原始快照基本原理为什么G1使用原始快照而不用增量更新。 记忆集与卡表 三色标记 基本原来 三色标记是JVM的垃圾收集器用于标记对象是否存活的一种方法。 三色是指黑…

【opencv】示例-train_HOG.cpp 训练和测试基于支持向量机(SVM)的行人检测器

#include "opencv2/imgproc.hpp" // 包含OpenCV图像处理头文件 #include "opencv2/highgui.hpp" // 包含OpenCV高层GUI&#xff08;图形用户界面&#xff09;头文件 #include "opencv2/ml.hpp" // 包含OpenCV机器学习模块头文件 #includ…

软考 - 系统架构设计师 - 质量属性例题 (2)

问题1&#xff1a; 、 问题 2&#xff1a; 系统架构风险&#xff1a;指架构设计中 &#xff0c;潜在的&#xff0c;存在问题的架构决策所带来的隐患。 敏感点&#xff1a;指为了实现某个质量属性&#xff0c;一个或多个构件所具有的特性 权衡点&#xff1a;指影响多个质量属性…

(一)基于IDEA的JAVA基础15

还是先来说一下: Arrays工具类 Arrays是java.util包提供的工具类 提供了操作数组的方法&#xff0c;如排序,查询等。 如排序(升序)使用sort方法 语法: Arrays.sort(数组名)&#xff1b; 还是直接写来看看: public class Test01 { public static void main(String[] args)…

vscode开发 vue3+ts 的 uni-app 微信小程序项目

创建uni-app项目&#xff1a; # 创建用ts开发的uni-app npx degit dcloudio/uni-preset-vue#vite-ts 项目名称 # 创建用js开发的uni-app npx degit dcloudio/uni-preset-vue#vite 项目名称VS Code 配置 为什么选择 VS Code &#xff1f; HbuilderX 对 TS 类型支持暂不完善VS…

深入理解GCC/G++在CentOS上的应用

文章目录 深入理解GCC/G在CentOS上的应用编译C和C源文件C语言编译C语言编译 编译过程的详解预处理编译汇编链接 链接动态库和静态库静态库和动态库安装静态库 结论 深入理解GCC/G在CentOS上的应用 在前文的基础上&#xff0c;我们已经了解了CentOS的基本特性和如何在其上安装及…

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

springboot抑郁症科普知识测试系统ssm-java

本系统设计了二种角色&#xff1a;管理员&#xff0c;用户。通过此系统&#xff0c;管理员可以在线视频、案例展示、、测试试卷、测试试题进行测试。以及在线对测试试卷进行批阅和批量删除&#xff0c;用户可以对自己的测试试卷进行测试&#xff0c;对管理员已经批阅过的试卷可…

【opencv】示例-stereo_calib.cpp 基于OpenCV的立体视觉相机校准的完整示例

// 包含OpenCV库中用于3D校准的相关头文件 #include "opencv2/calib3d.hpp" // 包含OpenCV库中用于图像编码解码的相关头文件 #include "opencv2/imgcodecs.hpp" // 包含OpenCV库中用于GUI操作的相关头文件 #include "opencv2/highgui.hpp" // 包…

在Mac中打开终端的3种方法

在使用Mac时&#xff0c;有时需要深入研究设置&#xff0c;或者完成一些开发人员级的命令行任务。为此&#xff0c;你需要终端应用程序来访问macOS上的命令行。下面是如何启动它。 如何使用聚焦搜索打开终端 也许打开终端最简单、最快的方法是通过聚焦搜索。要启动聚焦搜索&a…