Считывание ссылок на сайте и сохранение их в списке - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь считать URL-адреса данных из StatsCan следующим образом:


# 2015
url <- "https://www.nrcan.gc.ca/our-natural-resources/energy-sources-distribution/clean-fossil-fuels/crude-oil/oil-pricing/crude-oil-prices-2015/18122"

x1 <- read_html(url) %>% 
  html_nodes(xpath = '//*[@class="col-md-4"]/ul/li/ul/li/a') %>% 
  html_attr("href")


# 2014
url2 <- "https://www.nrcan.gc.ca/our-natural-resources/energy-sources-distribution/clean-fossil-fuels/crude-oil/oil-pricing/crude-oil-prices-2014/16993"

x2 <- read_html(url) %>% 
  html_nodes(xpath = '//*[@class="col-md-4"]/ul/li/ul/li/a') %>% 
  html_attr("href")

Это возвращает два пустых списка; Я смущен, поскольку это сработало для этой ссылки: https://www.nrcan.gc.ca/our-natural-resources/energy-sources-distribution/clean-fossil-fuels/crude-oil/oil-pricing/18087. В конечном итоге я хочу oop над списком и читать таблицы на каждой странице следующим образом:

for (i in 1:length(x2)){
  out.data <- read_html(x2[i]) %>% 
    html_table(fill = TRUE) %>% 
    `[[`(1) %>% 
    as_tibble()
  write.xlsx(out.data, str_c(destination,i,".xlsx"))
}

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Ваш XPath должен быть исправлен. Вы можете использовать следующий:

//strong[contains(.,"Oil")]/following-sibling::ul//a
0 голосов
/ 26 мая 2020

Чтобы извлечь все URL-адреса, я рекомендую использовать css селектор ".field-item li a" и подмножество в соответствии с шаблоном.

links <- read_html(url) %>% 
    html_nodes(".field-item li a") %>% 
    html_attr("href") %>% 
    str_subset("fuel-prices/crude")
...