从网页的特定位置抓取链接

Scraping links from a web page at a specific position

我正在尝试从网站收集一些 link。

例如,我有以下内容,我的想法是收集 link 上面写着 leer más 的地方,这是我从中得到 xpath 的地方。

url = "https://www.fotocasa.es/es/alquiler/viviendas/madrid-capital/todas-las-zonas/l/181"
x <- GET(url, add_headers('user-agent' = desktop_agents[sample(1:10, 1)]))
x %>% 
  read_html() %>% 
  html_nodes(xpath = '//*[@id="App"]/div[2]/div[1]/main/div/div[3]/section/article[1]/div/a/p/span[2]')

这给了我以下但不是 link:

{xml_nodeset (1)}
[1] <span class="re-CardDescription-link">Leer más</span>

此外,我考虑收集所有 links:

x %>% 
  read_html() %>% 
  html_nodes("a") %>% 
  html_attr("href")

这给了我很多 link,但不是我想要的各个网页的 link。

我想要一个 link 的列表,例如:

https://www.fotocasa.es/es/alquiler/vivienda/madrid-capital/aire-acondicionado-calefaccion-terraza-trastero-ascensor-amueblado-internet/162262978/d

https://www.fotocasa.es/es/alquiler/vivienda/madrid-capital/aire-acondicionado-calefaccion-trastero-ascensor-amueblado/159750574/d

https://www.fotocasa.es/es/alquiler/vivienda/madrid-capital/aire-acondicionado-calefaccion-jardin-zona-comunitaria-ascensor-patio-amueblado-parking-television-internet-piscina/162259162/d

这些链接存储在 script 标签内的 JavaScript 对象中。您可以正则表达式定义该对象的字符串,做一些 unescapes 以使 jsonlite 能够解析,然后应用自定义函数仅提取感兴趣的 url 到 json 对象

library(rvest)
library(jsonlite)
library(magrittr)
library(stringr)
library(purrr)

link <- 'https://www.fotocasa.es/es/alquiler/viviendas/madrid-capital/todas-las-zonas/l/181'
p <- read_html(url) %>% html_text()
s <- str_match(p, 'window\.__INITIAL_PROPS__ = JSON\.parse\("(.*)".*?;')[,2]
data <- jsonlite::parse_json(gsub('\\\"', '\\"', gsub('\\"', '"', s)))
links <- purrr::map(data$initialSearch$result$realEstates, ~ .x$detail$`es-ES` %>% url_absolute(link))