从网页的特定位置抓取链接
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))
我正在尝试从网站收集一些 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))