RSelenium抓取动态PHP表格数据方法
golang学习网今天将给大家带来《RSelenium抓取动态PHP表格数据到R数据框》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习文章或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

理解动态网页数据抓取挑战
在进行网页数据抓取(Web Scraping)时,我们经常会遇到内容通过 JavaScript 动态加载的网站。传统的 R 库,如 rvest 或 XML,通常依赖于直接获取页面的原始 HTML 源代码。然而,对于那些在浏览器端通过 JavaScript 渲染或填充内容的页面,原始源代码可能不包含我们所需的所有数据,特别是表格数据。例如,一个 PHP 网站可能在服务器端生成 HTML,但也可能包含客户端 JavaScript 逻辑来动态修改或添加内容。当尝试使用 GET 请求获取页面并解析时,如果目标表格是动态加载的,则会抓取失败。
为了克服这一挑战,我们需要一种能够模拟真实浏览器行为的工具,即执行 JavaScript、等待内容加载完毕后再提取数据。RSelenium 库正是为此而生,它允许我们通过 R 代码控制一个真实的浏览器实例(如 Firefox 或 Chrome),从而实现对动态网页的自动化操作和数据抓取。
环境准备与库加载
在使用 RSelenium 之前,需要确保您的系统已安装 Java 开发环境(JDK)以及您选择的浏览器(如 Firefox 或 Chrome)及其对应的 WebDriver(例如,Firefox 需要 geckodriver)。RSelenium 会在后台启动一个 Selenium Server 来协调 R 和浏览器之间的通信。
首先,加载所需的 R 库:
library(RSelenium) library(rvest) library(xml2)
使用 RSelenium 自动化浏览器
RSelenium 的核心思想是启动一个浏览器实例,然后通过 R 代码控制这个实例进行导航、交互和获取页面内容。
1. 启动 Selenium Server 和浏览器客户端
使用 rsDriver 函数来启动 Selenium Server 并创建一个浏览器客户端。您可以指定要使用的浏览器类型、端口号等。
# 启动 RSelenium 驱动和客户端 # browser: 指定要使用的浏览器 (如 "firefox", "chrome") # port: 指定 Selenium Server 监听的端口 # verbose: 是否输出详细日志 driver <- rsDriver(browser = "firefox", port = 4545L, verbose = FALSE) server <- driver$server # 获取 Selenium Server 对象 browser <- driver$client # 获取浏览器客户端对象
注意: 首次运行 rsDriver 时,它可能会自动下载所需的 WebDriver。如果遇到问题,请检查 Java 环境和 WebDriver 的安装情况。端口 4545L 是一个示例,如果该端口被占用,rsDriver 会尝试其他可用端口。
2. 导航到目标 URL
通过 browser$navigate() 方法,让启动的浏览器实例访问目标网页。
# 导航到目标 URL
browser$navigate("http://www.medindex.am/glossary/semantic_types/B2.2-disease-syndrome-pathologic-function.php")此时,浏览器会在后台打开并加载指定的页面。RSelenium 会等待页面加载完成,包括 JavaScript 脚本的执行。
3. 获取完整的页面源并提取表格
一旦页面加载完毕,我们可以通过 browser$getPageSource() 获取当前浏览器中渲染出的完整 HTML 源代码。这个源代码包含了所有动态加载的内容。然后,我们可以使用 xml2::read_html() 将其解析为 HTML 文档对象,并结合 rvest::html_table() 来提取页面中的所有表格。
# 获取浏览器中渲染出的完整页面源代码 doc <- xml2::read_html(browser$getPageSource()[[1]]) # 使用 rvest 提取页面中的所有表格 all.table <- rvest::html_table(doc)
html_table() 函数会返回一个列表,其中每个元素都是一个从 HTML 表格转换而来的数据框。通常,我们需要根据表格的内容或结构来判断哪个是目标表格。在本例中,目标数据位于列表的第二个元素。
# 访问并查看目标表格(例如,列表中的第二个表格) target_table <- all.table[[2]] print(target_table)
输出示例:
# A tibble: 22,397 x 4 # CUI Term Dictionary SemanticType # <chr> <chr> <chr> <chr> # 1 C0003865 Arthritis, Adjuvant NDFRT Experimental Model of Disease # 2 C0004426 avian sarcoma CSP Experimental Model of Disease # 3 C0004565 B16 Malignant Melanoma NCI Experimental Model of Disease # ... (更多行)
完整代码示例
以下是整个过程的完整 R 代码:
library(RSelenium)
library(rvest)
library(xml2)
# 1. 启动 RSelenium 驱动和客户端
# 注意:首次运行可能需要下载 WebDriver,确保 Java 环境已安装
driver <- rsDriver(browser = "firefox", port = 4545L, verbose = FALSE)
server <- driver$server
browser <- driver$client
# 2. 导航到目标 URL
browser$navigate("http://www.medindex.am/glossary/semantic_types/B2.2-disease-syndrome-pathologic-function.php")
# 3. 获取浏览器中渲染出的完整页面源代码
doc <- xml2::read_html(browser$getPageSource()[[1]])
# 4. 使用 rvest 提取页面中的所有表格
all.table <- rvest::html_table(doc)
# 5. 访问并查看目标表格(例如,列表中的第二个表格)
target_table <- all.table[[2]]
print(target_table)
# 6. 关闭 RSelenium 资源
browser$close()
server$stop()
# 7. 清理 Java 进程(如果需要,特别是 Windows 系统)
# 这有助于释放被 Selenium Server 占用的端口
# 请谨慎使用此命令,它会终止所有名为 java.exe 的进程
system("taskkill /im java.exe /f", intern = FALSE, ignore.stdout = FALSE)注意事项与资源清理
- 资源清理至关重要: RSelenium 会启动独立的进程(Selenium Server 和浏览器实例)。如果不正确关闭,这些进程可能会继续占用系统资源,特别是端口。因此,务必在完成操作后执行 browser$close() 和 server$stop()。
- Java 进程清理: 在某些操作系统(尤其是 Windows)上,即使 server$stop() 之后,Java 进程可能仍然存在并占用端口。system("taskkill /im java.exe /f") 命令可以强制终止所有 java.exe 进程,从而彻底释放资源。但请注意,这会终止所有正在运行的 Java 应用程序,请谨慎使用。
- WebDriver 版本: 确保您安装的 WebDriver 版本与您的浏览器版本兼容。rsDriver 通常会自动管理,但如果遇到启动问题,可以手动检查。
- 端口冲突: 如果 rsDriver 报告端口已被占用,可以尝试指定不同的端口号,或者在关闭所有相关进程后重试。
- 等待时间: 对于某些加载缓慢的页面,可能需要在 browser$navigate() 之后添加一个显式的等待时间(例如 Sys.sleep(5)),以确保所有内容都已加载完毕。
- 表格定位: html_table() 会返回一个表格列表。如果页面中有多个表格,您可能需要通过表格的特征(如标题、列名、行数)来确定哪个是您需要的表格。xpathSApply 或 html_nodes 结合 CSS 选择器或 XPath 表达式可以更精确地定位特定表格。
总结
RSelenium 提供了一个强大而灵活的解决方案,用于从动态加载内容的网页中抓取数据。通过模拟真实用户的浏览器行为,它能够处理 JavaScript 渲染的页面,从而获取传统方法无法获取的数据。虽然设置和清理过程比直接的 rvest 抓取更复杂,但对于复杂的网页抓取任务,RSelenium 是一个不可或缺的工具。正确理解其工作原理并遵循资源清理的最佳实践,将确保您的数据抓取过程高效且稳定。
终于介绍完啦!小伙伴们,这篇关于《RSelenium抓取动态PHP表格数据方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!
Spring事件驱动开发技巧分享
- 上一篇
- Spring事件驱动开发技巧分享
- 下一篇
- JavaScript事件循环如何处理异步?
-
- 文章 · php教程 | 19分钟前 | session URL参数 提示信息 PHP跳转 JavaScript弹窗
- PHP跳转并显示提示信息方法
- 375浏览 收藏
-
- 文章 · php教程 | 28分钟前 |
- 优化PHPMyAdmin数据库查询性能方法
- 383浏览 收藏
-
- 文章 · php教程 | 41分钟前 | php.ini 错误处理 日志记录 error_reporting PHP错误级别
- PHP错误级别有哪些?常见错误分类与设置方法
- 174浏览 收藏
-
- 文章 · php教程 | 1小时前 |
- PHP异步加载优化技巧分享
- 147浏览 收藏
-
- 文章 · php教程 | 1小时前 | 数据报表 csv 高效方法 PhpSpreadsheet PHP导出Excel
- PHP导出Excel的技巧与方法大全
- 329浏览 收藏
-
- 文章 · php教程 | 1小时前 | 消息队列 grpc API网关 RESTfulAPI PHP微服务架构
- PHP微服务通信与集成技巧
- 132浏览 收藏
-
- 文章 · php教程 | 1小时前 |
- MySQL多表连接与别名使用技巧
- 373浏览 收藏
-
- 文章 · php教程 | 1小时前 |
- TwitterAPIv1.1图片加载失败解决方法
- 430浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3179次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3390次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3418次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4525次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3798次使用
-
- PHP技术的高薪回报与发展前景
- 2023-10-08 501浏览
-
- 基于 PHP 的商场优惠券系统开发中的常见问题解决方案
- 2023-10-05 501浏览
-
- 如何使用PHP开发简单的在线支付功能
- 2023-09-27 501浏览
-
- PHP消息队列开发指南:实现分布式缓存刷新器
- 2023-09-30 501浏览
-
- 如何在PHP微服务中实现分布式任务分配和调度
- 2023-10-04 501浏览

