0

0

使用R语言抓取动态网页数据:基于V8引擎的JavaScript内容提取

霞舞

霞舞

发布时间:2025-08-08 21:22:01

|

650人浏览过

|

来源于php中文网

原创

使用R语言抓取动态网页数据:基于V8引擎的JavaScript内容提取

本教程详细介绍了如何使用R语言有效抓取由JavaScript动态加载的数据,特别是当传统HTML解析方法失效时。通过利用V8包在R环境中执行JavaScript代码,并结合httr、dplyr和tidyr进行数据获取与处理,文章演示了从特定网站提取嵌套表格数据的完整流程,为处理复杂网页爬取任务提供了专业指南。

1. 动态网页数据抓取的挑战

在网页抓取(web scraping)任务中,我们经常会遇到数据并非直接嵌入在html结构中,而是通过javascript在客户端动态生成和渲染的情况。传统的r包如xml或rvest主要用于解析静态html内容,当目标数据位于javascript变量中或通过ajax请求加载时,这些工具往往无法直接获取到所需信息。

以从特定网站(如https://www.fatf-gafi.org/countries/)提取国家列表为例,如果尝试直接使用readLines和htmlParse,会发现页面上显示的“国家列表”数据并未出现在原始HTML源码中,而是通过页面加载后执行的JavaScript代码动态填充。这正是需要更高级抓取技术,如JavaScript执行环境的原因。

2. 解决方案:R中的V8引擎

为了解决JavaScript动态加载数据的问题,我们可以利用R中的V8包。V8包提供了一个嵌入式的JavaScript和WebAssembly引擎,允许我们在R环境中直接执行JavaScript代码,并访问其执行结果。这意味着,如果目标数据存储在某个JavaScript变量中,我们可以在R中运行包含该变量的JavaScript代码,然后直接从V8引擎中提取该变量的值。

3. 实施步骤与代码示例

以下是使用V8包从动态网页中提取数据的具体步骤和R代码示例。

3.1 识别JavaScript数据源

首先,我们需要确定包含目标数据的JavaScript文件或脚本。这通常需要检查网页的开发者工具(F12),在“网络”(Network)或“源代码”(Sources)标签页中查找加载的.js文件,或在HTML中查找内联的

立即学习Java免费学习笔记(深入)”;

该文件的URL为:https://www.fatf-gafi.org/media/fatf/fatfv20/js/country-data-multi-lang.js。

3.2 加载所需库

我们需要httr用于发送HTTP请求获取JavaScript文件内容,V8用于执行JavaScript,以及dplyr和tidyr用于后续的数据清洗和整理。

BGremover
BGremover

VanceAI推出的图片背景移除工具

下载
library(httr)   # 用于发送HTTP请求
library(V8)     # 用于执行JavaScript
library(dplyr)  # 用于数据操作
library(tidyr)  # 用于数据整理

3.3 获取JavaScript内容

使用httr::GET函数获取JavaScript文件的内容。content(..., 'text')确保我们以纯文本形式获取响应。

# 定义JavaScript文件的URL
js_url <- paste0('https://www.fatf-gafi.org/media/fatf/fatfv20/',
                 'js/country-data-multi-lang.js')

# 使用httr获取JavaScript文件的内容
js_content <- content(GET(js_url), 'text')

3.4 初始化V8引擎并执行JavaScript

创建一个V8上下文(context),然后使用ct$eval()方法执行获取到的JavaScript代码。执行后,JavaScript代码中定义的变量(例如countries)将存储在V8引擎的内存中。

# 创建一个V8上下文
ct <- v8()

# 在V8上下文中执行JavaScript内容
ct$eval(js_content)

3.5 提取数据并进行清洗

通过ct$get("variable_name")方法,我们可以从V8上下文中提取指定JavaScript变量的值。在本例中,目标变量是countries。提取出的数据通常是一个嵌套的列表结构,需要使用tidyr::unnest()、dplyr::select()和dplyr::filter()等函数进行扁平化、选择所需列和去除无效行。

# 从V8上下文中获取'countries'变量的值
# unnest() 用于展开嵌套的数据框列
# select() 用于选择需要的列
# filter() 用于移除不完整的行(例如,名称为NA的行)
extracted_data <- ct$get("countries") %>%
  unnest(cols = c(groups)) %>%
  select(c(1:2, 4:14, 16)) %>% # 根据实际数据结构选择列,这里选择了部分列
  filter(!is.na(name))

# 打印提取并清洗后的数据的前几行
print(head(extracted_data))

执行上述代码后,extracted_data将包含一个整洁的数据框,其中包含了从网站动态加载的各国信息,包括国家名称、代码以及其所属的各种组织(如FATF、APG等)。

4. 注意事项与总结

  • JavaScript源定位: 找到正确的JavaScript文件或内联脚本是关键。这通常需要一些对网页结构和网络请求的分析能力。
  • 变量名识别: 确保你提取的JavaScript变量名是正确的,并且它确实包含了你想要的数据。
  • 数据结构理解: 从JavaScript中提取的数据可能以列表、嵌套对象或数组的形式存在。了解其结构有助于使用tidyr等工具进行有效的数据清洗和扁平化。
  • 动态性与稳定性: 网站的JavaScript代码可能会更新,这可能导致你的抓取脚本失效。定期检查和维护是必要的。
  • 合法性与道德: 在进行任何网页抓取活动时,请务必遵守网站的服务条款和robots.txt协议,并尊重数据所有者的权利。避免对服务器造成过大负担。

通过V8包,R语言用户能够有效地克服传统HTML解析器在处理动态网页内容时的局限性,从而扩展了R在网页抓取领域的应用范围。这种方法为从复杂、JavaScript驱动的网站中提取结构化数据提供了强大的能力。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

160

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

160

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

117

2023.11.15

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

235

2024.09.24

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1903

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2092

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1081

2024.11.28

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.0万人学习

ASP 教程
ASP 教程

共34课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号