Webscrape - R - 从复杂页面中提取
Webscrape - R - Extract from complex page
我需要从此页面中提取 80 个城市的值:
https://deutschland-studie-senioren-familie.zdf.de/senioren/
不幸的是,URL 不包含城市名称,而是具有如下结尾:“district/05754.
如果它有名字,我会使用:
ds= list ("Munich","Cologne", "further cities...")
for (city in ds){
page = paste0("https://deutschland-studie-senioren-familie.zdf.de/senioren/"
...}
在那种情况下你会怎么做?您可以在此页面上输入 city/postal 代码 - https://deutschland-studie-senioren-familie.zdf.de/senioren/ - 但我不知道如何编码,所以它会在 for 循环中自动执行。
此外,我想提取“Sicherheit und Infrastruktur”下每个城市的变量“Verkehrssicherheit”的排名。我用 Selectorgadget 尝试过,但它有问题。有什么提示吗?
非常感谢您。
可以从 svg 文件中提取名称和代码。然后,您可以构建一个映射 table 来帮助您使用名称中的 ID:
library(rvest)
library(tidyverse)
lookup <- read_html("https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/dmap.svg") %>%
html_nodes("#kreise path") %>%
map_df(., function(x) {
data.frame(
place = x %>% html_attr("data-name"),
id = x %>% html_attr("id")
)
})
urls <- paste0('https://deutschland-studie-senioren-familie.zdf.de/senioren/', lookup$id)
但是,您可以获得名称、等级等 json,如下所示:
library(jsonlite)
data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')
您可以操纵 json 数据,例如按位置升序排列:
library(jsonlite)
library(tidyverse)
data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')$districts
df <- map_df(data, function(x) {
data.frame(
name = x %>% {.$name},
rank = x %>% {.$overall$rank}
)
})
df <- df[order(df$rank),]
我需要从此页面中提取 80 个城市的值:
https://deutschland-studie-senioren-familie.zdf.de/senioren/
不幸的是,URL 不包含城市名称,而是具有如下结尾:“district/05754.
如果它有名字,我会使用:
ds= list ("Munich","Cologne", "further cities...")
for (city in ds){
page = paste0("https://deutschland-studie-senioren-familie.zdf.de/senioren/"
...}
在那种情况下你会怎么做?您可以在此页面上输入 city/postal 代码 - https://deutschland-studie-senioren-familie.zdf.de/senioren/ - 但我不知道如何编码,所以它会在 for 循环中自动执行。
此外,我想提取“Sicherheit und Infrastruktur”下每个城市的变量“Verkehrssicherheit”的排名。我用 Selectorgadget 尝试过,但它有问题。有什么提示吗?
非常感谢您。
可以从 svg 文件中提取名称和代码。然后,您可以构建一个映射 table 来帮助您使用名称中的 ID:
library(rvest)
library(tidyverse)
lookup <- read_html("https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/dmap.svg") %>%
html_nodes("#kreise path") %>%
map_df(., function(x) {
data.frame(
place = x %>% html_attr("data-name"),
id = x %>% html_attr("id")
)
})
urls <- paste0('https://deutschland-studie-senioren-familie.zdf.de/senioren/', lookup$id)
但是,您可以获得名称、等级等 json,如下所示:
library(jsonlite)
data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')
您可以操纵 json 数据,例如按位置升序排列:
library(jsonlite)
library(tidyverse)
data <- jsonlite::read_json('https://deutschland-studie-senioren-familie.zdf.de/assets/data/senioren/districts.json')$districts
df <- map_df(data, function(x) {
data.frame(
name = x %>% {.$name},
rank = x %>% {.$overall$rank}
)
})
df <- df[order(df$rank),]