Webscraping sur Aliexpress avec Rselenium

R
Web scraping
Auteur·rice

Aurelien Callens

Date de publication

18 novembre 2020

Aujourd’hui, je vais vous montrer comment récupérer les prix des produits sur le site Aliexpress.

Quelques mots sur le web scraping

Avant de plonger dans le sujet, vous devez savoir que le web scraping n’est pas autorisé sur certains sites web. Pour savoir si cela s’applique au site que vous souhaitez scraper, je vous invite à vérifier la page robots.txt qui devrait se trouver à la racine de l’adresse du site. Pour Aliexpress, cette page se trouve ici : www.aliexpress.com/robots.txt.

Cette page indique que le web scraping et le crawling ne sont pas autorisés sur plusieurs catégories de pages telles que /bin/*, /search/*, /wholesale* par exemple. Heureusement pour nous, la catégorie /item/*, où les pages des produits sont stockées, peut être scrappée.

RSelenium

Installation pour Ubuntu 18.04 LTS

L’installation de RSelenium n’a pas été aussi simple que prévu et j’ai rencontré deux erreurs.

La première erreur que j’ai obtenue après avoir installé le package et essayé la fonction Rsdriver était :

Error in curl::curl_fetch_disk(url, x$path, handle = handle) :
Unrecognized content encoding type. libcurl understands deflate, gzip content encodings.

Grâce à ce post, j’ai installé le package manquant : stringi.

Une fois cette erreur corrigée, j’en ai rencontré une autre :

Error: Invalid or corrupt jarfile /home/aurelien/.local/share/binman_seleniumserver/generic/4.0.0-alpha-2/selenium-server-standalone-4.0.0-alpha-2.jar

Cette fois-ci, le problème venait d’un fichier corrompu. Grâce à ce post, j’ai su que je devais simplement télécharger ce fichier selenium-server-standalone-4.0.0-alpha-2.jar depuis le site officiel de Selenium et remplacer le fichier corrompu par celui-ci.

J’espère que cela aidera certains d’entre vous à installer RSelenium sur Ubuntu 18.04 LTS !

Ouverture d’un navigateur web

Après avoir corrigé les erreurs ci-dessus, je peux maintenant ouvrir un navigateur Firefox :

library(RSelenium)

#Open a firefox driver
rD <- rsDriver(browser = "firefox") 
remDr <- rD[["client"]]

Connexion à Aliexpress

La première étape pour récupérer les prix des produits sur Aliexpress est de se connecter à son compte :

log_id <- "Your_mail_adress"
password <- "Your_password"

# Navigate to aliexpress login page 
remDr$navigate("https://login.aliexpress.com/")

# Fill the form with mail address
remDr$findElement(using = "id", "fm-login-id")$sendKeysToElement(list(log_id))

# Fill the form with password
remDr$findElement(using = 'id', "fm-login-password")$sendKeysToElement(list(password))

#Submit the login form by clicking Submit button
remDr$findElement("class", "fm-button")$clickElement()

Version Phantomjs

Si vous exécutez le code ci-dessus, vous devriez voir un navigateur Firefox s’ouvrir et naviguer à travers la liste que vous avez fournie. Dans le cas où vous ne souhaitez pas une fenêtre active, vous pouvez remplacer Firefox par le navigateur phantomjs, qui est un navigateur sans interface graphique (headless).

Je ne sais pas pourquoi, mais l’utilisation de rsDriver(browser = "phantomjs") ne fonctionne pas pour moi. J’ai trouvé cet article qui propose de démarrer le navigateur phantomjs avec le package wdman :

library(wdman)
library(RSelenium)
# start phantomjs instance
rPJS <- wdman::phantomjs(port = 4680L)

# is it alive?
rPJS$process$is_alive()

#connect selenium to it?
remDr <-  RSelenium::remoteDriver(browserName="phantomjs", port=4680L)

# open a browser
remDr$open()

remDr$navigate("http://www.google.com/")

# Screenshot of the headless browser to check if everything is working
remDr$screenshot(display = TRUE)

# Don't forget to close the browser when you are finished ! 
remDr$close()

Conclusion

Une fois que l’on comprend les bases de RSelenium et comment sélectionner des éléments dans des pages HTML, c’est assez facile d’écrire un script pour extraire des données sur le web. Cet article est un exemple simple d’extraction du prix des produits sur les pages Aliexpress, mais le script peut être étendu pour extraire plus de données sur chaque page, telles que le nom de l’article, sa note, etc. Il est même possible d’automatiser ce script pour qu’il s’exécute quotidiennement afin de suivre l’évolution des prix au fil du temps. Les possibilités sont infinies !

Retour au sommet