r - 使用 rvest 提取 url - 返回 {{article.Link}} 而不是链接?
问题描述
我正在尝试从网站“https://politi.dk/doegnrapporter”中抓取网址。我在 R 中使用 rvest 和 dplyr,但我的代码输出{{article.Link}}
而不是实际链接。我认为这与加载链接网站的网站的 html 代码中的一些 Java 脚本有关,但是当我在 R 中抓取 url 时如何抵消这种情况。到目前为止,我的代码是:
library(rvest)
page <- read_html("https://politi.dk/doegnrapporter")
t <- page %>% html_nodes("a.newsResultLink") %>% html_attr('href')
t
[1] "{{article.Link}}"
因此,{{article.Link}}
我想要的不是超链接的 URL 列表,例如“https://politi.dk/oestjyllands-politi/doegnrapporter/doegnrapport07092021/2021/09/07”、“https://politi.dk/nordsjaellands-politi /doegnrapporter/nordsjaellands-politi-uddrag-af-doegnrapport-0607-september-2021/2021/09/07”等。
解决方案
数据是从ng-init
具有 class 的元素的属性中提取的newsList
。这与ngInit
Angular 中的指令相关联,当 JavaScript 在页面上运行时,数据会动态加载到您在网页上看到的位置。
您可以从该属性中提取内容,正则表达式输出适当的 JavaScript 对象以作为 json 处理,然后从中提取链接:
library(rvest)
library(stringr)
library(jsonlite)
page <- read_html('https://politi.dk/doegnrapporter')
m <- page |> html_element('.newsList') |> html_attr('ng-init') |> str_match(., 'init\\((.*)\\)')
data <- jsonlite::parse_json(m[2])
articles <- lapply(data$AllNews$NewsList, function(x) x$Link) |> unlist(recursive = F)
推荐阅读
- collections - 如何使用 materialize-css 创建包含操作的列表?
- mysql - MySQL 5.7:将简单的 JSON_ARRAY 转换为行
- angular - 将单击事件动态分配给 Angular 中的元素时,公共属性显示为未定义
- javascript - Javascript:如何以更好的方式放置这些数据?(字符串到数组/对象)
- javascript - Javascipt十进制乘除法输出
- powershell - 为什么按“Enter”等于数字0?
- performance - GPU 上所需的计算内存比 (OP/B)
- scala - 使用地图的 Scala 中的 zipWith
- git - 使用唯一的命令提交子模块中的更改
- laravel - laravel 6 使用社交名流包登录后重定向回页面