Dryscrape

Le scraping de sites Html devient plus compliqué lorsque les sites utilisent Javascript !

Par exemple, mon site de prédilection de test pour les bougies parfumées www.scandles.fr ne retourne pas toutes les informations que je veux lorsqu’il est interrogé par le robot qui alimente www.les-bougies.com  car il faut que l’exécution des scripts Javascript soit terminé avant d’en disposer.

Ryan Michell (cf. articles précédents) recommande d’utiliser Selenium associé à PhantomJS pour le scraping JS.

Pour ce qui me concerne c’est beaucoup d’outils pour pas grand chose. J’ai donc choisi de procéder différemment et de travailler avec Dryscrape

Le problème de Dryscrape, c’est la doc. Les explications sont quasi inexistantes et il n’y pas d’exemples mais comme moi je ne l’utilise que pour lire ma page Html, ça va.

J’ouvre une session, ouvre la page et la transfère à BeautifulSoup

session = dryscrape.Session()
session.visit(pageUrl)
response = session.body()
bsObj = BeautifulSoup(response)

 

 

 

Python 3 sur Mac

La version de Python par défaut sur Mac est la 2.7.

Pour installer la version 3, téléchargez-la sur le site Python puis lancer l’exécution.

Vous devriez avoir ensuite dans le dossier Applications, un nouveau dossier Python 3.5

Pour savoir où se trouve Python3 sur votre Mac :

which python3

/usr/local/bin/python3

Maintenant que vous avez Python3 (ne pas détruire Python 2.7!) je vous recommande (comme avec Python 2.7) de travailler dans un environnement virtuel.

C’est ce que je fais ici :

virtualenv -p $(which python3) bs4-3

bs4-3/bin/activate

J’installe ensuite requests dans cet environnement (ainsi que les autres packages dont j’ai besoin)

pip3 requests

Je peux ensuite travailler avec Python3 (la commande est python3 et non python)

BS4 – installation

Mes installations se font avec le gestionnaire de paquets Python pip.

pip permet d’installer les paquets disponibles sur le Python Package Index

Pour installer pip sur Mac, la commande est la suivante :

sudo easy_install pip

Ensuite, parce que je suis sur Mac et je ne veux pas mélanger les environnements de travail, j’ai créé un environnement virtuel

Pour installer virtualenvwrapper :

sudo -H pip install virtualenvwrapper

Ensuite, après avoir créé le dossier bs4 et activé l’environnement virtuel, l’installation se fait classiquement avec pip

virtualenv bs4
cd bs4
source bin/activate
pip install beautifulsoup4
pip install lxml

Puisque lxml est installé dans le même environnement que beautifulsoup, BS4 l(utilisera en priorité

In other words, just installing lxml in the same python environment makes it a default parser.

Un premier test pour vérifier que ça marche (afficher tous les liens de la première page du site marchand www.scandles.fr ) – c’est un des sites qui « alimente » via les scripts Python le moteur de recherche www.les-bougies.com

from bs4 import BeautifulSoup
soup = BeautifulSoup (open("www.scandles.fr"))
links = soup.find_all('a')
for link in links:
    print link

BS4 – Introduction

La plupart des tests présentés ici sont inspirés du livre : Web Scraping with Python en vente chez O’Reilly et aussi disponible au formats Pdf et Epub à cette adresse.

Je travaille sur Mac avec OS El Capitan et mon Python est en version 2.7 (ce qui explique que le code de mes tests est un peu différent de celui présenté par l’auteur du livre)

Mon site de test est mon moteur de recherche www.les-bougies.com et quand je veux accéder à un site marchand, je choisis généralement www.scandles.fr 

Evidemment, libre à vous d’utiliser d’autres URL/sites pour tester vos scripts.

from urllib import urlopen

html = urlopen(« http://www.les-bougies.com »)

print(html.read())

urllib est intégré de base à Python. Habituellement j’utilise Requests qui intègre urllib dans la version Python 3 – mais pour rester le plus fidèle aux scripts donnés en exemple dans le livre, je resterai avec urllib  dans mes premiers exemples.

Si vous exécutez le script ci-dessus, vous afficherez le code html de la première pas de www.les-bougies.com

Le prochain post expliquera comment installer BS4

BeautifulSoup

BeautifulSoup est un package python, qui utilise un parser (un analyseur syntaxique) – écrit en Python pour parcourir un arbre d’éléments X(HTML) afin d’effectuer des recherches ou des modifications au sein de cet arbre.

BeautifulSoup (BS4) est le parser X(Html) que j’ai retenu. J’ai longuement hésité à utiliser Scrapy (à qui je consacrerai aussi un post) mais BS4 à l’avantage de la simplicité et de la compatibilité avec Python 3 (ce qui n’était pas le cas de Scrapy lorsque j’ai commencé le projet même si pour l’instant je travaille avec Python 2.7…)

Parce que je travaille sur Mac avec l’OS X El Capitan, l’installation de BS4 n’a pu se faire de façon simple (j’y reviendrai). Il m’a fallu utiliser virtualenvwrapper.

Une fois, tous les problèmes d’installation résolus et un apprentissage rapide avec ce tutoriel et un test à partir avec le fichier exemple 43rd-congress BS4 se révèle être très simple d’utilisation et répondre parfaitement à mes attentes.

Je commente ci-dessous un test qui permet d’extraire les liens du site www.scandles.fr 

import requests
from bs4 import BeautifulSoup

u = "http://www.scandles.fr"
html = requests.get(u)
data = html.content
bsObj = BeautifulSoup(data)
links=bsObj.findAll("a")

requests est une bibliothèque HTTP

Requests is an elegant and simple HTTP library for Python, built for human beings.

bs4 est la bibliothèque BeautifulSoup

Après avoir fait un get pour obtenir la page et extrait le content, il ne reste plus qu’à le passer à BS4 pour en faire un objet qu’on pourra parser avec la librairie.

Si vous testez cet exemple, avec votre propre URL (remplacez u par ce que vous voulez) alors vous verrez que links contient tous les liens de votre page.

Le moteur www.les-bougies.com utilise BS4 pour parser tous les sites de bougies parfumées (voir article précédent)

Pour une introduction au Scraping du Web avec Python, je vous recommande ce livre chez O’Reilly : Web Scraping with Python

 

 

b.a.-ba

J’explique ici, à l’attention de ceux qui sont curieux des moteurs de recherche, comment j’ai développé le mien, qui est spécialisé dans la recherche des bougies parfumées.

Le site est visible à l’adresse : www.les-bougies.com

L’objectif était de développer un outil, capable de surfer les sites marchands qui vendent des bougies parfumées et de lister sur mon moteur les bougies parfumées  trouvées en indiquant leur description, prix et lien.

Par exemple, la bougie parfumée Ambre & Rayures de Scandles est décrite de la façon suivante sur le moteur

Le moteur explore chaque jour les variations de prix et de titre et met à jour sa base de données.

Je présenterai ici progressivement les différentes étapes du projet. Avant d’entrer dans les détails, sachez que l’environnement technique est WordPress, Python, BeautifulSoup