Nous parlions hier du projet de webharvest que nous mettions sur les rails. Nous nous étions tourné vers le Xpath des éléments d'une page pour le scraper. Alors j'ai commencé à me documenter sur les outils existant pour basculer un fichier html vers de l'xml valide pour utiliser les commandes xpath. Puis je suis tombé sur un tuto YQL ! kesako YQL?
Il s'agit tout simplement d'un web service proposé par Yahoo (une fois de plus) qui signifie Yahoo! Query Language. Une sorte d'outils de requête SQL en ligne qui permet de sortir les datas d'une page web en XML.
Comment scraper du contenu avec YQL ?
Simple comme bonjour !
- Si vous utilisez firefox installer (si ce n'est pas déjà le cas) l'extension Firebug.
- Choisissez l'élément de la page qui vous intéresse. Dans l'onglet "html" faites un clic droit sur votre sélection et faites "copier le chemin Xpath".
- Rendez vous sur la console yahoo query langage puis formulez votre requête. N'oubliez pas de préciser de quel type de data il s'agit dans le dat-tables à droite de votre écran. Dans notre cas choisissez data/html.
- Dans le sql statement utilisez vos petits doigts boudinés pour saisir :
select * from html where url="[là tu tapes ton url]" and xpath='[là tu tapes ton xpath]'
puis un petit clic sur test.
- Maintenant admires le résultat. Tu es déçu? C'est que tu as oublié d'enlever html/body au début de ton path et de le remplacer par 2 slash (//).
Un exemple de webharvest via Xpath et YQL
Je souhaite voler consulter le contenu de manière originale de la page suivante :
http://do-while.com/the-places-you-wouldnt-like-to-visit-any-time-soon/
Ce qui m'intéresse est contenu dans la div qui a pour id "post-3021".
Son Xpath est :
html/bodydiv[@id=\'mainColumn\']/div[@id=\'post-3021\']
Ma requête yahoo aura cette tête :
select * from html where url="http://do-while.com/the-places-you-wouldnt-like-to-visit-any-time-soon/" and xpath='//div[@id=\'mainColumn\']/div[@id=\'post-3021\']/*'
J'explique. J'ai remplacé le html/body par // et j'ai ajouté un /* à la fin pour préciser que je voulais tous les enfants de cette div.
Quel interêt ?
Jetez un oeil en bas de la page dans la partie The rest query ! J'en dis pas plus.
Quelles limites?
C'est bien la le problème, 100 000 requêtes par jour par access key yahoo et 1000 par heure par IP.
C'est déjà bien et il est assez facile de trouver des parades.
Autre point faible et pas des moindre : le robots.txt ! YQL utilise l'user-agent yahoo pipes et il suffit donc au webmaster du site aspiré d'ajouter ces 2 lignes à son fichier robot pour empêcher le scrap :
User-agent: Yahoo Pipes 2.0
Disallow: /
Partager cet article
| < Précédent | Suivant > |
|---|





Commentaires
C'est le problème que nous donnons dans les 2 dernières lignes.
On cherche un moyen de contourner, si on trouve, on partage!