用Selenium开启自动化网页交互与数据抓取之旅

用Selenium开启自动化网页交互与数据抓取之旅

在当今数字化时代,数据的价值不言而喻,而网页作为海量数据的重要载体,如何高效获取其中的关键信息成为众多开发者和数据爱好者关注的焦点。Selenium这一强大工具,为我们打开了自动化操作网页和精准抓取数据的大门。今天,就来和大家深入聊聊Selenium的使用。

一、Selenium是什么

Selenium本质上是一款用于Web应用程序测试的工具,但它的用途远不止于此。简单来说,它可以驱动各种浏览器,像Chrome、Firefox、Edge等,按照我们编写的脚本代码去执行一系列操作,比如点击按钮、输入文本、打开网页以及验证页面元素等,模拟真实用户在浏览器上的行为。这意味着我们可以借助它实现网页操作的自动化,无论是繁琐的重复性任务,还是复杂的数据采集工作,都能轻松应对。

二、Selenium的工作原理

浏览器能够被Selenium驱动,关键在于webdriver驱动程序。不同的浏览器需要对应不同版本的webdriver,例如Chrome浏览器就有专门为其开发的chromedriver。webdriver就像是浏览器的“遥控器”,通过与浏览器内核进行交互,控制浏览器执行我们设定的命令。这就要求在使用Selenium时,务必确保下载的webdriver版本与所使用的浏览器版本相匹配,否则可能会出现各种兼容性问题。

三、Selenium的使用方法

(一)使用前的准备工作

  1. 安装Selenium库:安装Selenium非常简单,使用pip命令即可。在命令行中输入pip install selenium -i https://pypi.mirrors.ustc.edu.cn/simple/,就能快速完成安装。如果使用的是PyCharm等集成开发环境,也可以在其界面中轻松完成安装操作。
  2. 下载浏览器内核驱动:以Chrome浏览器为例,其内核驱动地址为https://chromedriver.storage.googleapis.com/index.html 。下载后,根据不同的操作系统进行相应的配置。在Windows系统中,解压下载的文件,并将其放置在Python安装目录的Scripts文件夹下;Linux和Mac系统类似,但要注意系统中可能存在多个Python版本,需确保配置的是当前运行的Python版本的环境变量。

(二)基本操作示例

  1. 打开网页并进行搜索:下面这段代码展示了如何使用Selenium打开苏宁易购网站,并搜索“手机”。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys__browser_url = r"C:\Program Files\Google\Chrome\Application\chrome.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_url    
driver = webdriver.Chrome(options=chrome_options)  driver.get('https://www.suning.com/') 
driver.find_element_by_id("searchKeywords").send_keys("手机" + Keys.RETURN)

在这段代码中,首先创建了一个Options对象,用于配置浏览器的相关参数,然后指定Chrome浏览器的安装路径,初始化Chrome驱动。接着使用get方法打开苏宁易购网站,再通过find_element_by_id找到搜索框元素,并使用send_keys方法输入“手机”并回车,完成搜索操作。

  1. 获取网页元素信息:在网页数据抓取中,获取元素信息是关键步骤。比如,我们可以获取网页上某个元素的文本内容、属性值、位置、标签名以及大小等信息。下面以获取苏宁易购手机商品评论为例:
from selenium import webdriver
from selenium.webdriver.edge.options import Options
import time__browser_url = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_url    
driver = webdriver.Edge(options=chrome_options)  from selenium.webdriver.common.by import By
driver.get('https://review.suning.com/cluster_cmmdty_review/cluster-38249278-000000012389328846-0000000000-1-good.htm?originalCmmdtyType=general&safp=d488778a.10004.loverRight.166')yzpj_file = open('优质评价1.txt','w')
def get_py_content(file):pj_elments_content = driver.find_elements(by=By.CLASS_NAME,value= 'body-content')for i in range(len(pj_elments_content)):file.write(pj_elments_content[i].text+'\n')
get_py_content(yzpj_file)next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]')
print(next_elements)
while next_elements !=[]:next_element = next_elements[0]time.sleep(1)next_element.click()get_py_content(yzpj_file)next_elements = driver.find_elements_by_xpath('//*[@class="next rv-maidian "]')
yzpj_file.close()

这段代码实现了从苏宁易购手机商品评价页面抓取优质评价的功能。首先打开指定的评价页面,然后定义了一个函数get_py_content,通过find_elements方法根据类名查找所有评价内容的元素,并将其文本写入文件。接着,使用find_elements_by_xpath方法查找“下一页”按钮元素,通过循环点击“下一页”按钮,持续获取并保存多页的评价内容。

(三)其他常用操作

  1. 前进、后退与刷新:在浏览网页时,前进、后退和刷新是常见操作,Selenium同样支持这些功能。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time__browser_url = r"D:\Program Files (x86)\360Roaming\360se6\Application\360se.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_urldriver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://www.taobao.com')  
driver.get('http://www.baidu.com')
driver.get('http://www.qq.com')
driver.back()  
time.sleep(5)  
driver.forward() 
time.sleep(5)
driver.refresh()  
driver.quit() 

上述代码展示了如何在不同网页之间切换,以及进行后退、前进和刷新操作,最后关闭浏览器。

  1. 操作Cookies:Cookies在网页交互中用于存储用户信息等数据,Selenium也能对其进行操作。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options__browser_url = r"D:\Program Files (x86)\360Roaming\360se6\Application\360se.exe" 
chrome_options = Options()
chrome_options.binary_location = __browser_urldriver = webdriver.Chrome(chrome_options=chrome_options)
driver.get('http://www.taobao.com')  
print(driver.get_cookies())
driver.add_cookie({'name': 'zhangsan', 'value' : '98'})
print(driver.get_cookies())

这段代码获取了淘宝网站的Cookies,并添加了一个自定义的Cookie,再次获取Cookies以查看添加效果。

四、项目实战 - 苏宁易购医用口罩信息抓取

下面通过一个实际项目,展示Selenium在数据抓取方面的强大功能。我们要从苏宁易购网站获取医用口罩的价格、名称、评价数和店铺名称信息。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
import time__browser_url = r"D:\Program Files (x86)\360Roaming\360se6\Application\360se.exe" 
chrome_options = Options()
# chrome_options.add_argument('--headless') 
chrome_options.binary_location = __browser_urldriver = webdriver.Chrome(chrome_options = chrome_options)
driver.get('http://www.suning.com')  
element = driver.find_element_by_xpath("//div/input[@tabindex='0']")
element.send_keys("医用口罩" + Keys.RETURN)
time.sleep(20)
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
time.sleep(20)
price_elements = driver.find_elements_by_xpath('//span[@class="def-price"]')
title_elements = driver.find_elements_by_xpath('//div[@class="title-selling-point"]')
evaluate_elements = driver.find_elements_by_xpath('//div[@class="info-evaluate"]')
store_elements = driver.find_elements_by_xpath('//div[@class="store-stock"]')
f = open('医用口罩.txt','w',encoding='utf-8')
for i in range(len(price_elements)):f.write(price_elements[i].text + '\t')f.write(title_elements[i].text + '\t')f.write(evaluate_elements[i].text + '\t')f.write(store_elements[i].text + '\n')
f.close()

在这个项目中,首先打开苏宁易购网站,通过XPath找到搜索框并输入“医用口罩”进行搜索。然后使用execute_script方法将页面滚动到底部,以便加载更多商品信息。接着,通过XPath分别获取价格、名称、评价数和店铺名称的元素,并将这些信息写入文件中。

Selenium为我们提供了丰富的功能,让网页自动化操作和数据抓取变得更加高效便捷。无论是进行网页测试、数据采集还是自动化任务处理,它都是一个不可多得的好帮手。希望通过这篇博客,大家能对Selenium的使用有更深入的了解,在实际项目中充分发挥它的优势。

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

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

相关文章

VB.net序列化和反序列化的使用方法和实用场景

引言 相信很多初学编程的人都会提出过这个疑问:“既然我的变量可以存在内存之中,那么是否也可以存在硬盘之中呢” 其实我想回答的是,完全可以而且方法不止一种,而今天讲的是序列化最经典的——二进制序列化 由于序列化的部分已…

Android OTA

一、OTA运行原理 Android 平台提供 Google diff arithmetic 差分机制,升级包支持完整升级以及差分升级,OTA 运行原理图如下所示。 1. OTA Server 负责对更新包进行上传,下载以及版本的管理。 2. 开发者在修改 Android 系统后,通…

Untiy基础学习(三)Untiy中编写脚本的基本规则

一、怎么创建脚本 在Project窗口下,右键Create C#Script 即可创建脚本 创建脚本的注意事项 : 1)类名和文件名必须一致,不然不能挂载(因为反射机制创建对象,会通过文件名去找Type) 2)没有特殊需…

VBA宏即根据第一列的内容和第二列的数字,按照数字数量生成对应内容并依次放在第三列、第四列等

打开你的 Excel 工作表。按下 Alt F11 组合键,打开 VBA 编辑器。在 VBA 编辑器中,点击 插入 -> 模块。在模块窗口中,输入以下 VBA 代码: Sub GenerateItems()Dim lastRow As LongDim i As Long, j As LongDim item As String…

深度学习系统学习系列【1】之基本知识

文章目录 说明基础知识人工智能、机器学习、深度学习的关系机器学习传统机器学习的缺陷选择深度学习的原因深度学习的关键问题深度学习的应用深度学习的加速硬件GPU环境搭建主流深度学习框架对比 说明 文章属于个人学习笔记内容,仅供学习和交流。内容参考深度学习原…

论文笔记-基于多层感知器(MLP)的多变量桥式起重机自适应安全制动与距离预测

《IET Cyber-Systems and Robotics》出版山东大学 Tenglong Zhang 和 Guoliang Liu 团队的研究成果,文章题为“Adaptive Safe Braking and Distance Prediction for Overhead Cranes With Multivariation Using MLP”。 摘要 桥式起重机的紧急制动及其制动距离预测是…

DeepSeek实战--各版本对比

1.对比 版本参数量优势劣势使用场景竞品DeepSeek-V36710亿(MoE架构,激活370亿)开源、高效推理(60 TPS)、低成本(API费用低)、中文处理能力突出(90%准确率多模态能力有限通用任务&am…

从0开始建立Github个人博客(hugoPaperMod)

从0开始建立Github个人博客(hugo&PaperMod) github提供给每个用户一个网址,用户可以建立自己的静态网站。 一、Hugo hugo是一个快速搭建网站的工具,由go语言编写。 1.安装hugo 到hugo的github标签页Tags gohugoio/hugo选择一个版本&#xff0c…

【AI论文】WebThinker:赋予大型推理模型深度研究能力

摘要:大型推理模型(LRMs),如OpenAI-o1和DeepSeek-R1,展示了令人印象深刻的长期推理能力。 然而,他们对静态内部知识的依赖限制了他们在复杂的知识密集型任务上的表现,并阻碍了他们生成需要综合各…

Linux_sudo命令的使用与机制

1、sudo命令的作用 sudo(全称 superuser do)是 Linux/Unix 系统中权限管理的核心工具。 允许普通用户在授权下以其他用户(默认是 root)的权限执行命令,而无需直接登录账户。 2、sudo命令的典型使用场景 sudo 覆盖了系…

Scrapy框架之 中间件的使用

爬虫中间件 特点:主要处理蜘蛛(Spider)和下载器(Downloader)之间的请求和响应。可以对蜘蛛生成的请求进行拦截、修改或过滤,也可以对下载器返回给蜘蛛的响应进行处理。适用场景: 请求过滤与修改…

供应链算法整理(一)--- 销量预估

在供应链管理领域有较多的预估场景,例如送达时长预估、销量预估、用电量预估。特别的在智能供应链领域,销量和库存的管理的智能化也依赖销量预估,因此在本文我们整理了 销量预估的算法详细的技术方案。 时间序列预测在最近两年内发生了巨大的…

第4篇:服务层抽象与复用逻辑

在业务系统复杂度指数级增长的今天,服务层(Service Layer)的合理设计直接影响着系统的可维护性和扩展性。本文将深入剖析 Egg.js 框架中的服务层架构设计,从基础实现到高级封装,全方位讲解企业级应用的开发实践。 一、…

Java学习手册:Spring 数据访问

一、Spring JDBC JdbcTemplate :Spring JDBC 提供了 JdbcTemplate 类,它简化了数据库操作,提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放,SQL 语句的执行,结果集的处理等…

递归、搜索和回溯算法《递归》

在之前的优选算法当中我们已经学习了一些基本的算法,那么接下来我们就要来学习算法当中的一大重要章节——递归、搜索和回溯算法,其实也就是大家常常听到的dfs、bfs;其实本质就是递归,在学习搜索、回溯等算法的过程当中我们会先来…

Java进阶--设计模式

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样&#xff0…

如何禁止AutoCAD这类软件联网

推荐二、三方法,对其他软件影响最小 一、修改Hosts文件 Hosts文件是一个存储域名与IP地址映射关系的文本文件,通过修改Hosts文件可以将AutoCAD的域名指向本地回环地址(127.0.0.1),从而实现禁止联网的目的。具体步骤如…

深度学习框架搭建(Vscode/Anaconda/CUDA/Pytroch)

目录 ​​​​​​一 Vscode安装 二、Anaconda安装 三、更新显卡驱动 四、安装CUDA 五、安装Pytorch 六、Vscode配置 七、出现的问题汇总 ​​​​​​一 Vscode安装 在 Windows 上安装 访问 VS Code 官网 https://code.visualstudio.com/,点击 "Downl…

结构模式识别理论与方法

我们在前文《模式识别的基本概念与理论体系》中就已经提及“模式分类”。 具体内容看我的CSDN文章:模式识别的基本概念与理论体系-CSDN博客 模式的识别方法主要有统计模式识别方法和结构模式识别方法两大类。统计模式识别方法提出得较早,理论也较成熟…

12.多边形的三角剖分 (Triangulation) : Fisk‘s proof

目录 1.Fisks proof Trangulation Coloring Domination Pigeon-Hold Principle Generation 2.Orthogonal Polygons (正交多边形) Necessity of floor(n4) Sufficiency by convex Quadrilateralization Generalization 1.Fisks proof Trangulation 引入内对角线&…