基于Selenium技术方案的爬虫入门实践

通过爬虫技术抓取网页,动态加载的数据或包含 JavaScript 的页面,需要使用一些特殊的技术和工具。以下是一些常用的技术方法:

  • 使用浏览器模拟器:使用像 Selenium、PhantomJS 或其他类似工具可以模拟一个完整的浏览器环境,这些工具都可以执行JavaScript并且返回渲染后的页面内容。使用这种方法可以模拟用户与网站的交互,从而得到完整的运行时状态。

  • 分析网络请求:使用网络抓包工具(例如 Fiddler、Wireshark)来监视网站上的网络请求。通过分析网络请求并确定用于检索数据的URL,可以获取请求数据并解析响应数据,从而获得所需的信息。

  • 解析 JavaScript 代码:有些网站将数据存储在 JavaScript 中并动态显示在页面上。使用 JavaScript 解析器(例如 jsdom、PyV8 等)可以执行 JavaScript 代码并解析响应结果,以获取所需的数据。

  • 接口直接请求:有些网站提供专用的API(应用程序接口),用于向开发人员公开数据。这些API允许开发人员通过发送HTTP请求来获取特定数据,并且网络请求和响应数据通常以JSON格式进行编码。

总之,抓取动态加载的数据或包含JavaScript的页面需要深入了解目标网站的技术细节以及使用现代的网络爬虫技术来获取所需的信息。

本文采用使用浏览器模拟器技术方案。

1. 使用Chrome开发者工具精确定位网页元素位置

F12键直接打开Chrome开发者模式,或者找到Chrome浏览器的“更多工具”中的“开发者工具”,如下图所示(这里以百度界面为例),使用百度网页查询搜索为例,获取界面元素,进行爬取。

1.1. 定位制定元素

定位原始xpath,在Elements中点击箭头(下图红圆圈圈定位置的箭头),移动鼠标箭头到百度输入框位置定位指定的元素(如下图所示,手工绘制箭头改变了颜色,并且弹出“Input#kw…”)。
在这里插入图片描述

1.2. 在定位元素的指定位置

在元素区域选定位置,鼠标右键弹出菜单选择框,选择Copy显示对应的元素定位方法。 点击:Copy Xpath,复制元素路径://[@id=“kw”]。
在这里插入图片描述
使用快捷查询功能,在Chrome浏览器中:Ctral+F调出查询功能。在下面的输入框,输入刚才的//
[@id=“kw”] 路径可以高亮在界面展示对应的元素。

2. Selenium工具爬取内容

Selenium是一种用于Web应用程序测试的自动化工具。它允许用户使用各种编程语言(如Java、Python、C#等)编写测试脚本来模拟实际用户在Web浏览器中的操作,例如点击链接、填写表单等等。Selenium也可以用于爬虫、数据挖掘和Web自动化等领域,因为它可以模拟人类的操作来获取Web页面的内容和数据。Selenium的优势在于它可以与各种主要的Web浏览器和操作系统一起使用,并且可以从多个平台上运行测试脚本。此外,Selenium还具有灵活性和可扩展性,因为它可以与其他测试框架和工具集成使用,从而提高测试效率和可靠性。

Selenium是一款常用的自动化测试工具,其开源地址为:https://github.com/SeleniumHQ/selenium。

2.1. 安装Selenium

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium 

2.2. 安装浏览器

Selenium是一个用于自动化测试的工具,而自动化测试需要模拟用户操作。而用户操作通常是通过浏览器完成的。所以Selenium需要与浏览器进行交互,模拟用户操作。但是,Selenium本身并不包含浏览器,需要通过浏览器驱动来实现与浏览器的交互。浏览器驱动充当着Selenium与浏览器之间的桥梁,通过驱动程序与浏览器进行通信,从而实现模拟用户操作的自动化测试。

本文仅使用Chrome浏览器,其驱动如下:
ChromeDriver 下载地址:https://chromedriver.storage.googleapis.com/index.html
在这里插入图片描述
安装时,需要把“chromedriver.exe”放到chrome的目录下…\Google\Chrome\Application\ ,然后设置path环境变量,增加chrome的目录(本文为C:\Program Files\Google\Chrome\Application)。

chromedriver.exeStarting ChromeDriver 114.0.5735.90 (386bc09e8f4f2e025eddae123f36f6263096ae49-refs/branch-heads/5735@{#1052}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

windows10上的环境变量配置如下:
在这里插入图片描述

2.3. 示例代码

仍以爬取百度查询结果为例,模拟百度过程如下:

  • 打开百度网页
  • 输入查询内容,本文查询输入为“python”
  • 点击打开第一行结果

示例代码:

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import timedriver = webdriver.Chrome() url = 'https://www.baidu.com/'
driver.get(url)
driver.maximize_window()# 获取百度搜索框元素
search_box = driver.find_element(By.ID ,"kw")   # 按ID查询
#search_box = driver.find_element(By.NAME,'wd') # 按Name查询# 在搜索框中输入关键词
search_box.send_keys("Python")# 模拟按下回车键进行搜索
search_box.send_keys(Keys.RETURN)# 或者通过这种方法回车搜索
# ---------------------------------------
# 获取搜索按钮元素
# search_button = driver.find_element(By.ID, "su")# 点击搜索按钮
# search_button.click()
#-----------------------------------------# 等待页面加载完成
driver.implicitly_wait(10)# 获取搜索结果列表元素
search_results = driver.find_elements(By.CSS_SELECTOR, ".result")# 输出搜索结果标题和链接
for result in search_results:title = result.find_element(By.CSS_SELECTOR,"h3").textlink = result.find_element(By.CSS_SELECTOR,"a").get_attribute("href")print(title, link)# 点击第一个搜索结果链接
first_result = search_results[0].find_element(By.CSS_SELECTOR,"a")
first_result.click()# 返回上一页
driver.back()# 刷新当前页面
driver.refresh()# 最大化浏览器窗口
driver.maximize_window()# 关闭浏览器实例
driver.quit()#time.sleep(1)

注:因为 find_element_by_css_selector 方法已经被弃用,最新版本的 Selenium 推荐使用 find_element 方法。因此,这段代码使用了更新后的方法来定位页面元素。

结果如下所示:
在这里插入图片描述
需要注意的是,动态生成的页面可能需要更长的时间来加载和解析。因此,您可能需要增加等待时间或使用其他技术来加快页面加载速度。

3. 小结

本文介绍了如何使用Selenium技术进行爬虫实践,以百度网页查询为例。首先,我们将学习如何在Chrome浏览器开发者模式下获取元素。接下来,我们将指导您安装Selenium和Chromedriver。最后,我们将通过一个简单的示例来演示如何模拟百度搜索"Python"的过程。

通过以上示例代码,您可以实现使用Selenium技术模拟百度搜索"Python"的功能。这只是爬虫技术的入门,您还可以学习更多高级功能,如模拟登录、处理动态加载内容等。

参考:

虫师. selenium + python自动化测试环境搭建. 博客园. 2013.05

lovingsoft.chrome浏览器f12快速定位元素的技巧. CSDN博客. 2021.01

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

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

相关文章

【设计模式】原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接…

linux I/O性能优化

Linux 文件系统 磁盘和文件系统的关系: 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。 文件系统工作原理 索引节点和目录项 文件系统,本身是对存储设备上的文件,进行组织…

如何使用Pycharm 快速搭建 Django 项目 (分享详细图文教程)

1. 准备工作 在开始创建Django项目之前,需要先确保已经安装了Python和Pycharm。并且python中已经安装好了Django依赖。 1安装python(这里我安装使用的是python3.11.4稳定版本) 官网下载太慢了这里直接贴网盘下载连接了,一起贴出py…

模拟实现消息队列(以 RabbitMQ 为蓝本)

目录 1. 需求分析1.1 介绍一些核心概念核心概念1核心概念2 1.2 消息队列服务器(Broker Server)要提供的核心 API1.3 交换机类型1.3.1 类型介绍1.3.2 转发规则: 1.4 持久化1.5 关于网络通信1.5.1 客户端与服务器提供的对应方法1.5.2 客户端额外…

Docker的基本概念及镜像加速器的配置

1.Docker的概念 由于代码运行环境不同,代码运行会出现水土不服的情况。运用docker容器会把环境进行打包,避免水土不服。docker是一种容器技术,它解决软件跨环境迁移的问题。 2,安装Docker 3.Docker架构 4.Docker镜像加速器的配…

黑马机器学习day3

1.线性回归 1.1线性回归的原理 线性关系 非线性关系 1.2线性回归的损失和优化原理 目标:求模型参数,模型参数能够使预测准确 1损失函数 2优化方法 正规方程:直接求解W梯度下降:试错,改进 1.3线性回归API 1线性回…

opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

什么是Hu 矩? Hu 矩(Hu Moments)是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征,具有平移、旋转和尺度不变性,适用于图像识别、匹配和形状…

NO.3 MyBatis获取参数的两种方式

目录 1、两种方式的区别 2、单个字面量类型的参数 2.1 在映射文件中,用#{}加任意名称获取参数的值: 2.2 在映射文件中,用${}加任意名称获取参数的值: 2.3 小结 3、在map集合类型的参数 3.1 使用MyBatis默认的map映射集合 …

Electron 应用实现截图并编辑功能

Electron 应用实现截图并编辑功能 Electron 应用如何实现截屏功能,有两种思路,作为一个框架是否可以通过框架实现截屏,另一种就是 javaScript 结合 html 中画布功能实现截屏。 在初步思考之后,本文优先探索使用 Electron 实现截屏…

2023年10款常用的Mac工具合集

Typora Typora 是一款由 Abner Lee 开发的轻量级 Markdown 编辑器,与其他 Markdown 编辑器不同的是,Typora 没有采用源代码和预览双栏显示的方式,而是采用所见即所得的编辑方式,实现了即时预览的功能,但也可切换至源代…

通达OA SQL注入漏洞【CVE-2023-4165】

通达OA SQL注入漏洞【CVE-2023-4165】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

Offset Explorer

Offset Explorer 简介下载安装 简介 Offset Explorer(以前称为Kafka Tool)是一个用于管理和使Apache Kafka 集群的GUI应用程序。它提供了一个直观的UI,允许人们快速查看Kafka集群中的对象以及存储在集群主题中的消息。它包含面向开发人员和管…