Web Scraping simple avec Google Sheets ➕ Scraping leboncoin

 


COLLECTER LES DONNÉES D’UN SITE EN 30 SECONDES AVEC GOOGLE SHEETS

NB : cet article demande quelques bases en HTML et en CSS, notamment sur les concepts de balise et de classes. Ces bases peuvent nĂ©anmoins s’acquĂ©rir trĂšs rapidement, notamment en consultant le site suivant.

Introduction

La digitalisation de la sociĂ©tĂ© et l’essor du e-commerce engendrent chez les webmarketeurs et les managers un besoin croissant d’accĂ©der Ă  l’information en temps rĂ©el. Il devient de plus en plus primordial d’ĂȘtre capable de consulter instantanĂ©ment et sur de larges volumes des informations telles que les derniers tweets de telle ou telle entreprise, ou bien les prix de tel ou tel concurrent.

digital-crawl

C’est pourquoi le data crawling, ou collecte automatisĂ©e de donnĂ©es, connaĂźt une popularitĂ© grandissante auprĂšs des managers d’aujourd’hui. Vous pouvez notamment utiliser le data crawling et la mĂ©thode que nous allons aborder aujourd’hui pour faire du price monitoring de votre concurrence, mener trĂšs rapidement des audits SEO de sites web, ĂȘtre averti en temps rĂ©el de la publication d’offres d’emploi sur le site carriĂšre d’une entreprise … les applications sont illimitĂ©es.

Au cours de ces derniĂšres annĂ©es, Google a fortement mis l’accent sur sa suite bureautique, et a rĂ©ussi Ă  sĂ©duire de plus en plus d’entreprises, non sans raisons. Cette stratĂ©gie culmine avec le rĂ©cent lancement de GSuite, prĂ©sentĂ© comme un “ensemble d’applications intelligentes pour les entreprises ». Cette dĂ©finition, quoique pompeuse, est tout Ă  fait appropriĂ©e, dans la mesure oĂč les applications de Google telles que Drive, Gmail ou encore Sheets se diffĂ©rencient de la concurrence de par leur facultĂ© Ă  se “connecter » au web, et Ă  pouvoir interagir entre elles. Il est ainsi possible de crawler des donnĂ©es avec Sheets, de les stocker sur Drive, puis de les envoyer automatiquement par mail via Gmail.

Nous allons aujourd’hui nous concentrer sur la possibilitĂ© de crawler des donnĂ©es via Sheets, qui est l’Ă©quivalent SaaS par Google de Microsoft Excel.

1 – La fonction IMPORTXML

D’aprĂšs le support de Google, la fonction IMPORTXML “importe des donnĂ©es depuis des types de donnĂ©es structurĂ©es tels que XML, HTML, CSV, TSV et des flux RSS et ATOM XML. »

Bien plus que cela, cette formule importe les données et les rafraßchit en live si leur valeur change sur la page que vous crawlez !

Sa syntaxe est la suivante : IMPORTXML("url", "requĂȘte_xpath")

Avec :

  • URL : adresse de la page Ă  examiner, protocole inclus (http, https…)
  • requĂȘte_xpath : requĂȘte XPath Ă  exĂ©cuter sur les donnĂ©es structurĂ©es.

Ne prenez pas peur, malgrĂ© son nom peu avenant, l’utilisation du XPath est assez simple Ă  apprĂ©hender : c’est une sorte “d’adresse » qui permet de naviguer entre les Ă©lĂ©ments d’une page web. De plus, nous allons voir qu’il est trĂšs facile Ă  obtenir.

2 – Les choses sĂ©rieuses commencent

Sans plus attendre, mettons en application ! Pour commencer, nous allons crawler le dernier article de la liste des articles “en continu » du Monde.

Retrouvez tous les exemples de cet article en cliquant ici : http://bit.ly/2n4Kx5m

Rendez-vous Ă  l’adresse sur Google Drive, connectez vous Ă  l’aide de votre compte Google, et crĂ©ez une nouvelle Sheets (bouton bleu “Nouveau » > Sheets en haut Ă  gauche de l’Ă©cran).

Maintenant que votre fichier de travail est ouvert, positionnez-vous dans la cellule A1. Pour que notre fonction IMPORTXML fonctionne, nous avons besoin de deux Ă©lĂ©ments : l’adresse de la page Ă  visiter, et le XPath de l’Ă©lĂ©ment Ă  crawler.

Pour l’adresse, il s’agit de http://www.lemonde.fr, nous allons donc maintenant chercher le XPath.

Rendez-vous sur Le Monde, de prĂ©fĂ©rence Ă  l’aide de Google Chrome (ce tutoriel se basera sur ce navigateur, qui est le plus utilisĂ© aujourd’hui). La liste des articles “en continu » est situĂ©e Ă  droite de l’image principale de la page.

  • Positionnez votre souris sur le premier lien de cette liste et effectuez un clic droit > Inspecter.

    digital-crawl-donnees

  • Le code HTML de la page s’affiche, et le code du lien est en surbrillance (en bleu).
  • Positionnez votre souris sur cette surbrillance bleue et effectuez un clic droit > Copy > Copy XPath.

    digital-crawl-donnees

  • Nous avons dĂ©sormais tout ce dont nous avions besoin ! Retournez sur Google Sheets, positionnez-vous dans la case A1, et inscrivez-y la formule :
=IMPORTXML("http://www.lemonde.fr";"//*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li[1]/a")

NB : La partie //*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li[1]/acorrespond au XPath que vous avez copiĂ© dans votre presse-papier.

Appuyez sur entrĂ©e, et aprĂšs une petite sĂ©quence de chargement, le rĂ©sultat s’affiche : fĂ©licitations, vous avez crawlĂ© vos premiĂšres donnĂ©es avec Google Sheets !

digital-crawl-donnees

Si vous obtenez une erreur, c’est trĂšs probablement car vous avez des guillemets dans votre XPath, et ceux-ci posent un problĂšme avec les guillemets de la formule. Remplacez-les par des apostrophes et tout devrait marcher !

Exemple : [@id="habillagepub"] devient [@id='habillagepub']

3 – Allons plus loin

Comme vous l’aurez remarquĂ©, nous n’avons crawlĂ© que le dernier article de la liste. Il serait bien plus intĂ©ressant d’avoir la liste entiĂšre.

Ceci nĂ©cessite de jongler un peu avec le XPath. Vous aurez remarquĂ© les numĂ©ros entre crochets dans celui-ci : ils signifient que nous sĂ©lectionnons l’Ă©lĂ©ment qui porte ce numĂ©ro dans l’arborescence de la page. Par exemple, « div[2] » signifie que nous sĂ©lectionnons le 2e Ă©lĂ©ment <div>.

En Ă©tudiant un peu le code, on remarque que tous les liens des articles “en continu » sont contenus dans des Ă©lĂ©ments <a>, eux-mĂȘme contenus dans des Ă©lĂ©ments <li>. Or, si l’on regarde dans le XPath, nous y avons uniquement sĂ©lectionnĂ© le premier Ă©lĂ©ment <li> :

//*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li[1]/a

Si nous voulons sĂ©lectionner tous les liens, il suffit donc de supprimer ce numĂ©ro, et IMPORTXML crawlera par dĂ©faut tous les Ă©lĂ©ments.

Essayons donc avec la formule suivante :

=IMPORTXML("http://www.lemonde.fr";"//*[@id='habillagepub']/div[1]/div/div[2]/div[1]/div[1]/ul[1]/li/a")

digital-crawl

Vous l’avez sans doute compris, lors de vos propres tentatives, les difficultĂ©s que vous rencontrerez seront principalement dues au XPath, qui est un outil peut-ĂȘtre compliquĂ© Ă  aborder Ă  premiĂšre vue, mais nĂ©anmoins trĂšs logique, et extrĂȘmement puissant. Il est utilisĂ© dans de trĂšs nombreux domaines et je ne peux que vous conseiller de vous documenter sur ses subtilitĂ©s. Il est possible que vous ne rĂ©ussissiez pas Ă  obtenir le rĂ©sultat souhaitĂ© du premier coup, il faudra alors essayer de l’obtenir en modifiant le XPath (ce qui peut s’avĂ©rer hardu au premier essai, j’en conviens).

Pour plus d’informations sur le XPath, c’est par ici : http://www.w3schools.com/xml/xpath_intro.asp.

4 – Allons encore plus loin

Imaginons que nous voulons rĂ©cupĂ©rer la liste de tous les articles du blog CrĂšme de la CrĂšme et leur titre. La liste de tous les articles est assez facile Ă  trouver, il suffit de se rendre sur le sitemap de CrĂšme de la CrĂšme(le fichier qui contient toutes les adresses du site, afin que Google puisse les indexer). Cependant, le titre de l’article est une information qui se trouve ailleurs, sur chacune des pages d’article. Nous allons donc devoir crawler cette information sur chacun des articles du blog.

Le fichier sitemap des posts de CrĂšme de la CrĂšme se situe Ă  cette adresse. Nous allons donc tout d’abord crawler la liste de toutes les adresses d’articles Ă  l’aide de la formule :

=importxml("http://blog.cremedelacreme.io/sitemap-posts.xml";"//*[local-name() ='url']/*[local-name() ='loc']")

digital-crawl

Puis, en observant le code d’une page d’article, on se rend compte que le titre est une balise <h1> portant la classe « post-title ». Autre force du XPath, nous allons donc crawler ces titres en les sĂ©lectionnant par classe :

=importxml(A1;"//h1[@class='post-title']")

Etendez la formule jusqu’au bas de la liste d’articles, et le tour est jouĂ© ! Si vous voulez crawler plusieurs informations distinctes sur la mĂȘme page en une seule formule, c’est possible aussi avec IMPORTXML ! Vous n’avez qu’Ă  inscrire plusieurs XPath Ă  la suite en les sĂ©parant par une barre verticale « | ».

Par exemple, si vous voulez aussi, en plus de son titre, crawler les tags de chaque article, utilisez la formule suivante :

=importxml(A1;"//div[@class='tag-links']/a|//h1[@class='post-title']")

Cependant, ici les donnĂ©es s’affichent les unes en dessous des autres et nous empĂȘchent d’Ă©tendre la formule. On utilisera donc la formule TRANSPOSE qui permet de transformer une colonne en ligne (et inversement), ce qui donne finalement la formule :

=transpose(importxml(A1;"//div[@class='tag-links']/a|//h1[@class='post-title']"))

5 – Repousser les limites

IMPORTXML est une fonction trĂšs puissante pour collecter les donnĂ©es du web. Comme nous l’avons vu, elle se base essentiellement sur le XPath, et il est primordial que vous vous documentiez un peu plus en dĂ©tail Ă  son sujet si vous souhaitez pouvoir crawler toutes les donnĂ©es que vous souhaitez.

Cette fonction fera le travail souhaitĂ© et vous donnera pleinement satisfaction dans la grande majoritĂ© des cas. Cependant, il faut lui reconnaĂźtre des limites, notamment en terme de vitesse de crawl sur les trĂšs grands volumes de donnĂ©es. Un simple copier-coller du XPath ne marchera pas toujours non plus, il faudra parfois le modifier un peu avec pour obtenir le rĂ©sultat souhaitĂ©.

digital-crawl-tips

Il devient alors beaucoup plus intĂ©ressant de dĂ©velopper ses propres fonctions pour Google avec Sheets avec GScript, le langage de programmation de Google. Ce langage quasi-jumeau de Javascript vous permettra de dĂ©velopper des API et des applications trĂšs rapides pour Sheets, Drive, Doc, Gmail… Ă  la maniĂšre des macros sur Excel.

Il devient alors notamment possible de manipuler en profondeur les donnĂ©es, de programmer des actions dans le temps, de crĂ©er dynamiquement des feuilles de calculs, voire mĂȘme d’envoyer par mail leur rĂ©sultat de maniĂšre automatique … ce que nous verrons dans un prochain article !

Source de ce bel article : cremedelacreme.io





Web Scraping simple Ă  l'aide de Google Sheets (mise Ă  jour 2022)

jeudi 04 août 2022

Un outil de Web scraping peut automatiser le processus de copie et de collage rĂ©pĂ©titif. En fait, les feuilles de Google peuvent ĂȘtre considĂ©rĂ©es comme un Web scraper de base. Vous pouvez utiliser une formule spĂ©ciale pour extraire des donnĂ©es d'une page Web, importer les donnĂ©es directement dans des feuilles Google et les partager avec vos amis.

Dans cet article, je vais d'abord vous montrer comment crĂ©er un simple Web scraper avec Google Sheets. Ensuite, je vais le comparer avec un Web scraper automatique, Octoparse. AprĂšs l'avoir lu, vous aurez une idĂ©e claire de la mĂ©thode qui conviendrait le mieux Ă  vos besoins spĂ©cifiques de Web scraping. 

 

 

 

Option#1: Créez un web scraper simple en utilisant ImportXML dans les feuilles de calcul Google

Étape 1: Ouvrez une nouvelle feuille Google.


Étape 2: Cliquez avec le bouton droit sur la page Web et cela fait apparaĂźtre un menu dĂ©roulant. Puis sĂ©lectionnez "inspecter". Appuyez sur une combinaison de trois touches: "Ctrl" + "Shift" + "C" pour activer "Selector". Cela permettrait au panneau d'inspection d'obtenir les informations de l'Ă©lĂ©ment sĂ©lectionnĂ© dans la page Web.

 

 


Étape 3: Copiez et collez l'URL du site Web dans la feuille. 

 

Option#2: Essayons de récupérer les données de prix avec une formule simple: ImportXML


Étape 1: Copiez le Xpath de l'Ă©lĂ©ment. SĂ©lectionnez l'Ă©lĂ©ment de prix et cliquez avec le bouton droit de la souris pour faire apparaĂźtre le menu dĂ©roulant. SĂ©lectionnez ensuite «Copier», choisissez «Copier XPath».

 

 

 

 

Étape 2: Tapez la formule dans la feuille de calcul.

 = IMPORTXML ("URL", "Expression XPATH")


Notez que "l'expression Xpath" est celle que nous venons de copier Ă  partir de Chrome. Remplacez le guillemet double " " dans l'expression Xpath par un guillemet simple ".

 

 

 


Option#3: Il existe une autre formule que nous pouvons utiliser:

= IMPORTHTML ("URL", "QUERY", Index) 

Avec cette formule, vous extrayez la table entiĂšre.

 

 

 

 

Voyons maintenant comment la mĂȘme tĂąche de grattage peut ĂȘtre accomplie avec un web scraper, Octoparse.

 

Étape 1: Ouvrez Octoparse, crĂ©ez une nouvelle tĂąche en choisissant «+ TĂąche» sous le «Mode avancĂ©»


Étape 2: Choisissez votre groupe de tĂąches prĂ©fĂ©rĂ©. Entrez ensuite l'URL du site Web cible et cliquez sur "Enregistrer l'URL". Dans ce cas: site Web de vente de jeux http://steamspy.com/


Étape 3: Le site Web Avis de vente de jeux s'affiche dans la section d'affichage interactive d'Octoparse. Nous devons crĂ©er une liste de boucles pour qu'Octoparse parcoure les listes. 

1. Cliquez sur une ligne du tableau (il peut s'agir de n'importe quel fichier du tableau) Octoparse détecte alors les éléments similaires et les met en surbrillance en rouge.

2. Nous devons extraire par lignes, donc choisissez «TR» (Table Row) dans le panneau de contrĂŽle.

3. Une fois qu'une ligne a Ă©tĂ© sĂ©lectionnĂ©e, choisissez la commande «SĂ©lectionner tous les sous-Ă©lĂ©ments» dans le panneau Conseils d'action.

 

Étape 4: Choisissez «Extraire les donnĂ©es dans la boucle» pour extraire les donnĂ©es.

Vous pouvez exporter les donnĂ©es vers Excel, CSV, TXT ou d'autres formats souhaitĂ©s. Alors que la feuille de calcul nĂ©cessite que vous copiez et colliez physiquement, Octoparse automatise le processus. De plus, Octoparse a plus de contrĂŽle sur les sites Web dynamiques avec AJAX ou reCaptcha.

 


Plus de ressources:

Les 3 Meilleures Façons d'Extraire les Données d'un Site Web

Top 30 des outils Big Data pour l'analyse de données

25 astuces pour développer votre entreprise avec l'extraction de données Web

ModĂšles de Web Scraping

Vidéo: Créez votre premier Scraper avec Octoparse 8.X




https://dynamitestaff.github.io/R-workshops/Web_data_collection/scrap_leboncoin/projet_leboncoin.html


library(httr)
library(rvest)
library(tidyverse)
library(knitr) # Just to have nice tables in the html document... -> function 'kable'
# And for geocoding:
# devtools::install_github(repo = 'rCarto/photon')  
library(photon)

GĂ©rer la lecture des pages leboncoin

Si vous essayez de lire une page dans Leboncoin en utilisant read_html()directement la fonction, vous obtiendrez probablement un message d'erreur 403, ce qui signifie que l'accĂšs vous a Ă©tĂ© refusĂ©. Envoyez une requĂȘte comme s'il s'agissait d'une requĂȘte rĂ©guliĂšre envoyĂ©e depuis votre navigateur .

Ouvrez votre navigateur Inspector -> allez dans l'onglet RĂ©seau et eux allez sĂ©lectionner la partie de la rĂ©ponse qui correspond Ă  la partie html de la rĂ©ponse. Ensuite, jetez un Ɠil aux en-tĂȘtes envoyĂ©s avec votre requĂȘte. Nous allons utiliser 3 Ă©lĂ©ments d'information ici et les ajouter Ă  notre requĂȘte :

  • Agent utilisateur
  • Accepter (formats acceptĂ©s pour la rĂ©ponse)
  • Accept-Language (langues acceptĂ©es pour la rĂ©ponse)
go_GET <- function(url){
  result=GET(url,
             add_headers(
               "User-Agent" = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0",
               "Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
               "Accept-Language"="fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3"))
  return(result)
}
go_GET("https://www.leboncoin.fr/ventes_immobilieres/offres/rhone_alpes/rhone/")
## Response [https://www.leboncoin.fr/ventes_immobilieres/offres/rhone_alpes/rhone/]
##   Date: 2018-09-28 14:44
##   Status: 200
##   Content-Type: text/html; charset=utf-8
##   Size: 503 kB
## <!DOCTYPE html>
## <html lang="fr">
## <head>
##  <meta charset="utf-8">
##  <meta http-equiv="x-ua-compatible" content="ie=edge">
##  <title data-react-helmet="true">Ventes immobiliĂšres, maisons Ă  vendre R...
##  
##  <meta data-react-helmet="true" name="google-site-verification" content=...
## 
##  
## ...

Grattez toutes les annonces de la catégorie immobilier dans leboncoin

… pour l'instant, juste pour 1 dĂ©partement : RhĂŽne.

Pour chaque annonce, obtenir des informations

DĂ©finir la fonction ad_info(), qui prend l'URL d'une annonce en entrĂ©e et renvoie, en sortie, un fichier contenant des informations concernant

  • url: les urls des annonces
  • title: leurs titres,
  • type: le type de bien
  • surface: la surface du bien
  • rooms: le nombre de piĂšces
  • GHG: CatĂ©gorie d'Ă©mission de gaz Ă  effet de serre
  • energy_class: CatĂ©gorie de classe Ă©nergĂ©tique,
  • location: Localisation du bien

J'ai ajoutĂ© un temps d'attente alĂ©atoire Ă  chaque appel ad_info()de 1 Ă  5 secondes.

ad_info <- function(ad){
    Sys.sleep(runif(1,1,5))
    html_ad <- read_html(go_GET(ad))
    title <- html_ad %>% 
      html_nodes("._1KQme") %>% 
      html_text()
    criteria <- 
      tibble(name= html_ad %>% html_nodes("._3-hZF") %>% html_text(),
             value=html_ad %>% html_nodes("._3Jxf3") %>% html_text()) 
    f=function(x){if(length(x)==0){x=NA};return(x)}
    type    <- filter(criteria, name=="Type de bien")$value %>% f()
    surface <- filter(criteria, name=="Surface")$value %>%
      str_extract("^\\d*") %>% f()
    rooms   <- filter(criteria, str_detect(name,"Pi.ces"))$value %>% 
      as.numeric() %>% f()
   
    price <- html_ad %>% 
      html_nodes(".eVLNz") %>% 
      html_text() %>% 
      first() %>% 
      str_replace_all("[^0-9]","") %>% 
      as.numeric() 
    GHG <- html_ad %>% 
      html_nodes("._2BhIP") %>% 
      html_text() %>% 
      first()
    energy_class <-html_ad %>% 
      html_nodes("._15MMC") %>% 
      html_text() %>% 
      first()
    location <- html_ad %>% 
      html_nodes("._1aCZv") %>% 
      html_text() %>% 
      str_replace("Voir sur la carte","")
    ## Geocoding
    #
    #zipcode <- str_extract(location,"\\d+") 
    #city <- str_extract(location,"[A-Za-z- ]+")
    # url <- str_c("https://geocode.xyz/",zipcode,"+",city,"?json=1&region=FR")
    # raw_json <- GET(url)
    # geocode <- content(raw_json,as="parsed")
    # latitude <- geocode$latt
    # longitude <- geocode$longt
    coord_table=photon::geocode(location)
    latitude=coord_table$lat[1]
    longitude=coord_table$lon[1]
    tib_ad=bind_cols(urls=ad,
                     title=title,
                     price=price,
                     type=type,
                     surface=surface,
                     rooms=rooms,
                     GHG=GHG,
                     energy_class=energy_class,
                     location=location,
                     latitude=latitude,
                     longitude=longitude)
    return(tib_ad)
}
ad_info(tib_ads_urls$urls[1]) %>% kable()
URLTitrele prixtapersurfacepiÚcesGESclasse_énergétiqueemplacementlatitudelongitude
https://www.leboncoin.fr/ventes_immobilieres/1498833165.htm/Terrain viabilisĂ© 919m² Cailloux-sur-Fontaines399000Terrain919CECECECailloux-sur-Fontaines 6927045.852384.873766

Veuillez noter que si pendant le cours nous avions gĂ©ocodĂ© Ă  l'aide de l'API geocode.xyz, cela n'Ă©tait peut-ĂȘtre pas optimal pour le gĂ©ocodage avec R. Ce choix Ă©tait dĂ» au fait que nous voulions vous montrer comment utiliser une API dans une requĂȘte directe . Vous pouvez Ă©galement gĂ©ocoder en utilisant d'autres API avec des clients API (voir par exemple function geocode()in package photon, qui est la solution que nous avons finalement utilisĂ©e dans ce document).

Appliquez maintenant cette fonction de maniĂšre itĂ©rativead_info() Ă  toutes les annonces dans tib_ads_urls, en utilisant purrrl'itĂ©ration.

En fait je ne l'ai pas fait sur toutes les annonces mais juste sur 20 d'entre elles pour vous montrer le principe !

tmp=Sys.time()
tib_ads <- map(tib_ads_urls$urls[1:20],
                  safely(ad_info)) %>% 
     map("result") %>% bind_rows()
time_for_20_ads <- Sys.time()-tmp
tib_ads %>% kable()
URLTitrele prixtapersurfacepiÚcesGESclasse_énergétiqueemplacementlatitudelongitude
https://www.leboncoin.fr/ventes_immobilieres/1498833165.htm/Terrain viabilisĂ© 919m² Cailloux-sur-Fontaines399000Terrain919CECECECailloux-sur-Fontaines 6927045.852384.873766
https://www.leboncoin.fr/ventes_immobilieres/1487886414.htm/Appartement 4 piĂšces 70 m²235000Appartement704BETCaluire-et-Cuire 6930045.797004.842330
https://www.leboncoin.fr/ventes_immobilieres/1469672965.htm/Maison 9 piĂšces 260 m²590000Maison2609BETLentilly 6921045.817924.663355
https://www.leboncoin.fr/ventes_immobilieres/1497446180.htm/Maison de ville de 145m2 avec terrain349900Maison1455BETVillefranche-sur-SaĂŽne 6940045.986474.726611
https://www.leboncoin.fr/ventes_immobilieres/1498454616.htm/Maison Ă  LUCENAY200000Maison904BET69480 Lucenay45.912084.701603
https://www.leboncoin.fr/ventes_immobilieres/1498828413.htm/Appartement T3159000Appartement703BETVilleurbanne 6910045.773314.886934
https://www.leboncoin.fr/ventes_immobilieres/1412219839.htm/T4 - Carré Ouest338000Appartement854CECEFrancheville 6934045.735754.764730
https://www.leboncoin.fr/ventes_immobilieres/1497620632.htm/Appartement 3 piĂšces 63 m²298000Appartement633BETLyon 6900145.767774.836607
https://www.leboncoin.fr/ventes_immobilieres/1498826837.htm/T2 lyon 9e205000Appartement532BETLyon 6900945.780304.803430
https://www.leboncoin.fr/ventes_immobilieres/1417925822.htm/PropriĂ©tĂ© 11 piĂšces 450 m²895000Maison45011BETSaint-Pierre-la-Palud 6921045.788704.612964
https://www.leboncoin.fr/ventes_immobilieres/1454127092.htm/Maison de village 2 piĂšces 112 m²55000Maison1122CECESaint-ClĂ©ment-les-Places 6993045.752094.424050
https://www.leboncoin.fr/ventes_immobilieres/1495335959.htm/Maison de village 3 piĂšces 53 m²83000Maison533CECECourzieu 6969045.742634.571038
https://www.leboncoin.fr/ventes_immobilieres/1495336043.htm/Appartement 3 piĂšces 50 m²64000Appartement503BETTarare 6917045.894264.437137
https://www.leboncoin.fr/ventes_immobilieres/1493308695.htm/T4 rez de jardin382000Appartement864BETLyon 6900945.780304.803430
https://www.leboncoin.fr/ventes_immobilieres/1490785555.htm/DerniÚre Opportunité189000Appartement372BETLyon 6900545.766094.826979
https://www.leboncoin.fr/ventes_immobilieres/1490737572.htm/T2 ideal investisseur ou premier aquisition245000Maison412BETLyon 6900545.766094.826979
https://www.leboncoin.fr/ventes_immobilieres/1493272654.htm/Rare t3 rez de jardin BORD DE SAONE249700Appartement573BETLyon 6900945.780304.803430
https://www.leboncoin.fr/ventes_immobilieres/1493366641.htm/T4 rez de jardin370000Appartement804BETVilleurbanne 6910045.773314.886934
https://www.leboncoin.fr/ventes_immobilieres/1495288729.htm/T3 derniere opportunite Dernier Ă©tage191585Appartement603BETVilleurbanne 6910045.773314.886934
https://www.leboncoin.fr/ventes_immobilieres/1495183177.htm/Studio Ideal investisseur206000Appartement371BETVilleurbanne 6910045.773314.886934

Pour 20 publicitĂ©s, il nous a fallu environ 1,5 minute pour obtenir les donnĂ©es, donc si nous voulions faire cela sur toutes les publicitĂ©s (~ 14 000 publicitĂ©s), cela prendrait du temps (environ 18 heures…) !

Commentaires

Posts les plus consultés de ce blog

TOP outils de rĂ©fĂ©rencement gratuits qui valent la peine d'ĂȘtre utilisĂ©s en 2023

Les outils de rĂ©fĂ©rencement gratuits qui valent vraiment la peine d'ĂȘtre utilisĂ©s

Changement de domaine en 2023 : tout ce que vous devez savoir

Chatbot Dialogflow : Tutoriel NoCode NLP pour les spĂ©cialistes du marketing | Landbot

Revenu passif : idées pour gagner de l'argent (en dormant)

Meilleurs outils de rĂ©fĂ©rencement 🛠 organisĂ©e par Saijo George

La toolbox du growth hacker 💎 - Outils - Growthhacking.fr | CommunautĂ© française de growth hacking

Comment signer avec une maison de disques ? Voici notre guide ultime pour 2024

100 outils pour lancer sa startup sans argent (mais pas sans talent)