CrawlScript
Parser le web!
PrésentationCrawlScript est un langage simple conçu pour extraire des données depuis une source html.
En effet il permet de se déplacer facilement dans l'arbre crée a partir d'une page, de passer d'un lien a un autre, et fonctionne sur un principe de pile d'états, a chaque fois qu'on sort d'un scope l'état précédent est restauré.
Cette version est une version proof of concept développée sur un coup de tête en quelques heures.
Elle est donc minimaliste mais c’était surtout pour voir si le langage était viable.
ExempleVoici un script capable d'extraire les images d'une galerie d'images, et de passer a la page suivante pour extraire la galerie complète.
- Code:
-
set current_page "http://pixeljoint.com/pixels/new_icons.asp"
loop
{
jump current_page
{
// Extraction des images
dive <div class="imgbox">
{
parent
{
foreach <div class="imgbox">
{
dive <a>
{
print extract "href"
jump extract "href"
{
dive <div id="container">
{
dive <div class="bxconnect">
{
dive <img id="mainimg">
{
download extract "src"
}
}
}
}
}
}
}
}
// Passage a la page suivante
print "======================================================"
dive <div class="pager">
{
first <a> // bug: obligé de spécifier paramètre sinon marche pas
{
next {
next {
next {
print link extract "href"
set current_page link extract "href"
}
}
}
}
}
}
}
DownloadCrawlScript pour windows, première version:
http://host-a.net/u/onilink_/crawl.7zUne version qui utilise wget pour le téléchargement des fichiers, ce qui permet de gérer https:
http://wyvup.com/?c=A2cf3S9KeywordsInstructions:- download url_string : télécharge le fichier passé
- print string : affiche le texte passé
Parcours:- jump url_string : change de page web
- dive <balise> | dive <balise attribute="value"> : parcours récursif jusqu’à la balise spécifiée
- parent : se deplace sur la node parent
- first : se deplace sur la premiere node enfant
- next : se deplace sur la prochaine node
Boucles:- foreach <balise> | foreach <balise attribute="value"> : boucle sur toutes les balises enfants qui ont la balise spécifiée
- loop : boucle infinie
Manipulation de texte:- extract attribute_string : extrait un attribut d'une balise
- link url_string : permet de passer un lien relatif en lien absolut
- html : donne le html formaté contenu par la node courante
Variables:- set variable_name value_string
AméliorationsIl manque pas mal de keywords et de concepts basiques comme la possibilité d'effectuer une
condition. La syntaxe est actuellement lourde ( { et } obligatoires ) et le parseur a peut être
quelques mini bugs (c'est pour ça que j'affiche le code quand on exécute un script, pour voir si tout
roule niveau parsing, par ex imbriquer un bloc dans un bloc vide bug...).
Il est a prévoir aussi de permettre de modifier le header de la requête http, en effet certains
sites sont "protégés" et il faut donc feinter pour pouvoir dump leur contenu.
Le parseur html est un parseur totalement custom, il se peut qu'une page avec un contenu vraiment
dégueulasse puisse avoir du mal a être parsé (même si j'ai fait le parseur de manière a ce qu'il
puisse se débrouiller avec du code vraiment vraiment dégueulasse).
Il est simple de vérifier le html après parsing avec le keyword html.
Bref hésitez pas a me dire ce que vous en pensez, et si jamais vous l'essayez si vous avez une idée de
feature non prévue actuellement, postez ici :p