Home > Blockchain >  Filter rvest HTML tags by "contains" title in R
Filter rvest HTML tags by "contains" title in R

Time:06-10

I am trying to collect some links from a website in R. I want to collect just the following box of links in the footer.

Viviendas en venta en Artigues - Llefià
Viviendas en venta en Salut - Lloreda
Viviendas en venta en Gorg - Progrés
Viviendas en venta en Bonavista - Bufalà - Morera
Viviendas en venta en Montigalà - Sant Crist
Viviendas en venta en Centre Badalona
Viviendas en venta en Port
Viviendas en venta en Canyet - Pomar
Viviendas en venta en Casagemes - Canyadó

I can run the following:

library(rvest)

webpage = "https://www.fotocasa.es/es/comprar/viviendas/badalona/todas-las-zonas/l" %>% 
  read_html()

webpage %>% 
  html_nodes(".re-SharedSeoFooter-layout.re-SharedSeoFooter-layout--column") %>% 
  html_nodes(".re-SharedSeoFooter-nav") 

But I only want the items for "Viviendas en Badalona" and not the others. Preferably I would like to filter the 3 columns in the footer to something like contains("Viviendas en")

Running:

webpage %>% 
  html_nodes(".re-SharedSeoFooter-layout.re-SharedSeoFooter-layout--column") %>% 
  html_nodes(".re-SharedSeoFooter-nav") %>% 
  #html_nodes(".sui-MoleculeCollapsible") %>%
  html_nodes(".sui-ListLink") %>% 
  html_nodes(".sui-ListLink-item") %>% 
  html_nodes(".sui-LinkBasic")

Gives me all items but I cannot differentiate between the 3 columns in the footer:

Encuentra más inmuebles en Badalona, Viviendas cerca de Badalona and Viviendas en Badalona.

Any help on how I can split the 3 types of data up would be great. If I can scrape it like the following:

contains("Encuentra más inmuebles en")
contains("Viviendas cerca de")
contains("Viviendas en")

(Since the place name will change but not the base text).

CodePudding user response:

Is this what you wanted? These are the links for the stuff you listed

library(rvest)
library(tidyverse)

tibble(
  locations = "https://www.fotocasa.es/es/comprar/viviendas/badalona/todas-las-zonas/l" %>% 
    read_html() %>% 
    html_elements(".re-SharedSeoFooter-layout--column~ .re-SharedSeoFooter-layout--column  .re-SharedSeoFooter-layout--column .sui-LinkBasic") %>% 
    html_text2(),
  links = "https://www.fotocasa.es/es/comprar/viviendas/badalona/todas-las-zonas/l" %>% 
    read_html() %>% 
    html_elements(".re-SharedSeoFooter-layout--column~ .re-SharedSeoFooter-layout--column  .re-SharedSeoFooter-layout--column .sui-LinkBasic") %>% 
    html_attr("href") %>% 
    paste0("https://www.fotocasa.es/", .)
)

# A tibble: 9 x 2
  locations                                         links                         
  <chr>                                             <chr>                         
1 Viviendas en venta en Artigues - Llefià           https://www.fotocasa.es//es/c~
2 Viviendas en venta en Salut - Lloreda             https://www.fotocasa.es//es/c~
3 Viviendas en venta en Gorg - Progrés              https://www.fotocasa.es//es/c~
4 Viviendas en venta en Bonavista - Bufalà - Morera https://www.fotocasa.es//es/c~
5 Viviendas en venta en Montigalà - Sant Crist      https://www.fotocasa.es//es/c~
6 Viviendas en venta en Centre Badalona             https://www.fotocasa.es//es/c~
7 Viviendas en venta en Port                        https://www.fotocasa.es//es/c~
8 Viviendas en venta en Canyet - Pomar              https://www.fotocasa.es//es/c~
9 Viviendas en venta en Casagemes - Canyadó         https://www.fotocasa.es//es/c~
  • Related