52 votes

Raclage Web avec Haskell

Quel est l'état actuel des bibliothèques pour gratter des sites web avec Haskell?

Je suis en train de me faire faire plus de mes rapide oneoff tâches en Haskell, afin d'aider à augmenter mon niveau de confort avec la langue.

En Python, j'ai tendance à utiliser l'excellent PyQuery bibliothèque pour cela. Il y a une chose aussi simple et facile en Haskell? J'ai regardé dans la Soupe de tags, et tandis que l'analyseur lui-même semble bien, en réalité parcourant les pages ne semble pas aussi beau qu'il l'est dans d'autres langues.

Est-il une meilleure option là-bas?

36voto

sclv Points 25335

http://hackage.haskell.org/package/shpider

Shpider est un site web d'automatisation de bibliothèque pour Haskell. Il vous permet de rapidement écrire les chenilles, et pour les cas simples ( comme les liens suivants ), même sans la lecture de la source de la page.

Il a des fonctions utiles telles que la mise liens relatifs à partir d'une page dans les liens absolus, les options d'autoriser transactions uniquement sur un domaine donné, et l'option de téléchargement html documents.

Il fournit également une belle syntaxe pour le remplissage de formulaires.

Un exemple:

 runShpider $ do
      download "http://apage.com"
      theForm : _ <- getFormsByAction "http://anotherpage.com"
      sendForm $ fillOutForm theForm $ pairs $ do
            "occupation" =: "unemployed Haskell programmer"
            "location" =: "mother's house"

23voto

David James Points 8344

À partir de mes recherches sur le Haskell listes de diffusion, il apparaît que TagSoup est le choix prédominant pour l'analyse des pages. Par exemple: http://www.haskell.org/pipermail/haskell-cafe/2008-August/045721.html

Autant que les autres aspects de web scraping (telles que l'analyse, recherche et mise en cache), j'ai cherché http://hackage.haskell.org/package/ pour ces mots clés, mais ne trouve rien de prometteur. J'ai même écrémé grâce à des forfaits de mentionner "http", mais rien ne m'a sauté aux yeux.

Note: je ne suis pas un régulier Haskeller, donc j'espère que d'autres peuvent carillon si j'ai raté quelque chose.

11voto

Emmanuel Touzery Points 1677

Même si je suis encore pour l'instant un débutant en Haskell, j'ai la conviction que l'analyse HTML en 2012 doit être fait en utilisant les sélecteurs CSS, et il semble que les bibliothèques recommandé jusqu'à présent de ne pas utiliser ce principe.

Une possibilité est HandsomeSoup, qui est construit sur le haut de HXT:

http://egonschiele.github.com/HandsomeSoup/

http://codingtales.com/2012/04/25/scraping-html-with-handsomesoup-in-haskell

Cette page sur HXT, sur lequel HandsomeSoup repose, sera également utile (vous allez avoir besoin d'getText ou profonde getText):

http://adit.io/posts/2012-04-14-working_with_HTML_in_haskell.html

Mais un autre choix est dom-sélecteur:

http://hackage.haskell.org/package/dom-selector

C'est maintenant l'alpha et son maintien à long terme pourrait être un problème. L'avantage de dom-le sélecteur est que je n'arrivais pas à des caractères unicode pour travailler avec HandsomeSoup. Ils ont travaillé hors de la boîte avec les dom-sélecteur.

Cette question est liée à: Est-il possible d'utiliser des textes ou des ByteString sur HXT en Haskell?

dom-sélecteur est basé sur html-conduit et xml-conduit, pour qui l'entretien semble assuré.

EDIT: remarque mon nouvelle réponse sur l'objectif de l'analyse. J'ai quitté cette réponse comme c'est toujours bon sur son propre, mais je serais personnellement plutôt utiliser l'autre approche.

6voto

Emmanuel Touzery Points 1677

J'ai écrit une autre réponse à cette question déjà, ce qui suggère sélecteurs CSS-en fonction de l'analyse, cependant que la réponse est aujourd'hui un an et demi vieux, et je pense qu'aujourd'hui des lentilles peut être une meilleure approche en haskell. En effet, vous obtenez quelque chose comme type-safe compilé des sélecteurs.

Voir cette discussion reddit pour un couple d'options dans cette veine. Dans le cas où le lien disparaît, je copie les liens directs:

Je n'ai usé d'aucun de ceux encore, mais si je voulais écrire du nouveau code de parser le HTML, aujourd'hui, je serais certainement aller avec un objectif d'une telle approche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X