Options pour le code HTML de grattage?
Je pense que je vais essayer Belle Soupe, un paquet Python pour le code HTML de grattage. Existe-il d'autres HTML grattant les paquets que je devrais regarder? Python n'est pas une exigence, je suis réellement intéressé à entendre parler d'autres langues.
L'histoire jusqu'ici:
- Python
- Ruby
- .NET
- Perl
- Java
- JavaScript
- PHP
- La plupart d'entre eux
- (connexe), les Meilleures Méthodes pour analyser HTML
- La Soupe de tags lien est mort.
Vous devez vous connecter pour publier un commentaire.
Le Rubis du monde équivalent à Belle Soupe est why_the_lucky_stiff de Hpricot.
Dans le .Monde NET, je vous recommande le code HTML Agility Pack. Pas près aussi simple que certaines des options ci-dessus (comme HTMLSQL), mais il est très flexible. Il vous permet de maniuplate mal formé HTML comme si elle était bien formée XML, de sorte que vous pouvez utiliser XPATH ou tout simplement itereate sur les nœuds.
http://www.codeplex.com/htmlagilitypack
BeautifulSoup est un excellent moyen d'aller pour le code HTML de grattage. Mon emploi précédent m'avait fait beaucoup de raclage et je souhaite que je savais à propos de BeautifulSoup quand j'ai commencé. C'est comme le DOM avec beaucoup plus d'options utiles et c'est beaucoup plus pythonic. Si vous voulez essayer Ruby ils ont porté BeautifulSoup l'appelant RubyfulSoup mais il n'a pas été mis à jour en temps.
Autres outils sont HTMLParser ou sgmllib.SGMLParser qui font partie de la bibliothèque standard de Python. Ces travaux par appel de méthodes à chaque fois que vous entrer/sortir d'une balise et la rencontre de texte html. Ils sont comme des Expatriés si vous êtes au courant. Ces bibliothèques sont particulièrement utiles si vous allez à analyser de très gros fichiers et la création d'une arborescence DOM serait long et coûteux.
Les expressions régulières ne sont pas très nécessaire. BeautifulSoup gère les expressions régulières donc, si vous avez besoin de leur puissance, vous pouvez utiliser celui-là. Je dis aller avec BeautifulSoup, sauf si vous avez besoin de vitesse et une plus petite empreinte mémoire. Si vous trouvez un meilleur analyseur HTML sur Python, laissez-moi savoir.
J'ai trouvé HTMLSQL d'être ridiculement simple moyen de screenscrape. Il suffit de quelques minutes pour obtenir des résultats avec elle.
Les requêtes sont super-intuitive, comme:
Il y a maintenant quelques autres alternatives que de prendre la même approche.
Le Python lxml bibliothèque sert de Pythonic de liaison pour la libxml2 et libxslt bibliothèques. J'aime particulièrement sa charge de XPath et d'impression de la mémoire de la structure XML. Il prend également en charge l'analyse rompu HTML. Et je ne pense pas que vous pouvez trouver d'autres bibliothèques Python/les liaisons qui parse XML plus vite que lxml.
Pour Perl, il y a de WWW::Mechanize.
Python dispose de plusieurs options pour le code HTML de grattage en plus Belle Soupe. Voici quelques autres:
WWW:Mechanize
. Vous donne un navigateur comme objet de ineract avec des pages weblibwww
. Prend en charge diverses options pour parcourir et sélectionner des éléments (p. ex. XPath et CSS sélection)Simple HTML DOM Parser' est une bonne option pour PHP, si votre familier avec jQuery ou JavaScript, des sélecteurs, puis vous vous retrouverez à la maison.
Le trouver ici
Il y a aussi un post de blog sur le sujet ici.
Pourquoi personne n'a mentionné JSOUP encore pour Java? http://jsoup.org/
La templatemaker utilitaire de Adrian Holovaty (de Django de la gloire) utilise une approche très intéressante: Vous nourrir des variations de la même page et il "apprend" où les "trous" pour les données variables sont. Ce n'est pas HTML spécifique, de sorte qu'il serait bon pour gratter tout autre texte en clair contenu. Je l'ai utilisé aussi pour les fichiers Pdf et HTML converti en texte en clair (avec pdftotext et lynx respectivement).
Je voudrais d'abord savoir si le site(s) en question de fournir une API de serveur ou de Flux RSS pour accéder aux données dont vous avez besoin.
Je connais et j'adore Écran-Grattoir.
Écran-Grattoir est un outil pour extraire des données à partir de sites web. Écran-Grattoir automatise:
Utilisations courantes:
Technique:
Trois éditions de l'écran-grattoir:
Une autre option pour Perl serait Web::Grattoir qui est basé sur Ruby Scrapi. En un mot, avec nice et concise de la syntaxe, vous pouvez obtenir un grattoir robuste directement dans des structures de données.
Grattage de Débordement de Pile est particulièrement facile avec Chaussures et Hpricot.
J'ai eu un certain succès avec Interface htmlunit, en Java. C'est un simple cadre pour l'écriture des tests unitaires sur l'INTERFACE web, mais tout aussi utile pour le code HTML de grattage.
Yahoo! Langage de requête ou de YQL peut être utilisé alongwith jQuery, AJAX, JSONP à écran gratter des pages web
Un autre outil pour .NET est MhtBuilder
Il y a cette solution: netty HttpClient
- Je utiliser Hpricot sur Ruby. Comme un exemple de ceci est un extrait de code que j'utilise pour récupérer tous les titres de livres à partir de six pages de mon HireThings compte (comme ils ne semblent pas fournir une seule page avec cette information):
C'est à peu près complète. Tout ce qui vient avant ce sont bibliothèque importations et les paramètres de mon proxy.
J'ai utilisé Belle Soupe de beaucoup avec Python. Il est beaucoup mieux que de l'expression régulière de la vérification, car il fonctionne comme l'utilisation de la DOM, même si le code HTML est mal formaté. Vous pouvez trouver rapidement les balises HTML et le texte avec une syntaxe plus simple que les expressions régulières. Une fois que vous trouver un élément, vous pouvez parcourir, elle et ses enfants, qui est plus utile pour comprendre le contenu dans le code que c'est avec des expressions régulières. Je souhaite de Belles Soupe existé il y a des années lorsque j'ai eu à faire beaucoup de screenscraping -- il m'aurait sauvé beaucoup de temps et des maux de tête depuis HTML structure était si pauvre avant que les gens ont commencé à le valider.
Bien qu'il a été conçu pour .NET web-tests, j'ai été en utilisant le WatiN cadre à cet effet. Puisqu'il est basé sur le DOM, il est assez facile de capturer HTML, du texte ou des images. Dernièrement, je l'ai utilisé pour vider une liste de liens à partir d'un MediaWiki Toutes les Pages de l'espace de noms de la requête dans une feuille de calcul Excel. La suite VB.NET code fragement est assez brut, mais il fonctionne.
Les implémentations de la HTML5 algorithme d'analyse d': html5lib (Python, Ruby,...), Programme de validation.nu Analyseur HTML (Java, JavaScript, C++ dans le développement), Brouhaha (C), Twintsam (C#; venir).
Vous seriez fou de ne pas utiliser Perl.. Voici venir les flammes..
L'os sur les modules suivants et ginsu tout gratter autour de.
J'ai utilisé LWP et HTML:: "TreeBuilder" avec Perl et les ai trouvés très utiles.
LWP (court pour libwww-perl) vous permet de vous connecter à des sites web et gratter le HTML, vous pouvez obtenir le module ici et d'O'Reilly livre semble être en ligne ici.
"TreeBuilder" vous permet de construire un arbre à partir de l'HTML, et de la documentation et de la source sont disponibles dans HTML:: "TreeBuilder" - Analyseur qui construit un arbre de syntaxe HTML.
Il pourrait y avoir trop lourds de levage sont encore à faire avec quelque chose comme cette approche, si. Je n'ai pas regardé le Mécaniser module suggéré par une autre réponse, donc je peut très bien le faire.
En Java, vous pouvez utiliser TagSoup.
Bien, si vous voulez qu'il fait à partir du côté client en utilisant uniquement un navigateur vous avez jcrawl.com. Après avoir conçu votre la démolition de service de l'application web (http://www.jcrawl.com/app.html), il vous suffit d'ajouter le script généré pour une page HTML afin de commencer à l'utiliser/la présentation de vos données.
Tous la démolition de la logique qui se passe sur le navigateur à l'aide de JavaScript. J'espère que vous le trouverez utile. Cliquez sur ce lien pour un exemple vivant que les extraits de la dernières nouvelles de Yahoo tennis.
Vous avez probablement comme beaucoup déjà, mais je pense que c'est ce que vous essayez de faire:
J'ai eu des résultats mitigés .NET en utilisant SgmlReader qui a été à l'origine commencé par Chris Lovett et semble avoir été mis à jour par MindTouch.
J'aime les feuilles de calcul Google' ImportXML(URL, XPath) de la fonction.
Il répétera les cellules de la colonne si votre expression XPath renvoie plus d'une valeur.
Vous pouvez avoir jusqu'à 50
importxml()
fonctions sur une seule feuille de calcul.RapidMiner Web du Plugin est aussi assez facile à utiliser. Il peut faire des posts, accepte les cookies, et régler la user-agent.
J'ai aussi eu beaucoup de succès en utilisant Aptana est Jaxer + jQuery pour analyser les pages. Il n'est pas aussi rapide ou " script-comme dans la nature, mais sélecteurs jQuery + réel JavaScript/DOM est une bouée de sauvetage sur plus compliqué (ou mal) pages.
Expressions régulières fonctionnent assez bien pour HTML de grattage ainsi 😉 Mais après avoir regardé Belle Soupe, je peux voir pourquoi ce serait un outil précieux.
Pour les plus complexes de grattage applications, je vous recommande le IRobotSoft web grattoir. Il s'agit d'un logiciel gratuit de capture d'écran. Il a également un langage de requête pour les pages HTML, et il fournit un web très simple d'enregistrement de l'interface qui va vous libérer de beaucoup de travail de programmation.
Je fais beaucoup de advanced web grattage tellement voulu avoir un contrôle total sur mon tapis et de comprendre les limites. Cette webscraping bibliothèque est le résultat.
La récente parler par Dav Verre Bienvenue dans la Jungle! (YUIConf 2011 Keynote D'Ouverture) montre comment vous pouvez utiliser YUI 3 sur Node.js à faire côté client comme de la programmation (avec DOM sélecteurs au lieu de traitement de chaîne) sur le serveur. C'est très impressionnant.
J'ai été en utilisant Feedity - http://feedity.com pour certains de le raclage de travail (et de conversion dans les flux RSS) à ma bibliothèque. Il fonctionne bien pour la plupart des pages web.
J'ai fait une très belle bibliothèque Outils Internet pour le web scraping.
L'idée est de faire correspondre un modèle à l'encontre de la page web, qui va extraire toutes les données à partir de la page et aussi de valider si la structure de la page est inchangé.
De sorte que vous pouvez simplement prendre le code HTML de la page web que vous souhaitez traiter, supprimer toutes les dynamiques ou contenu non pertinent et annoter les parties intéressantes.
E. g. le code HTML d'une nouvelle question sur l'stackoverflow.com page d'index est:
Si vous venez de supprimer cet id, le titre et le résumé, pour créer un modèle qui permettra de lire toutes les nouvelles questions dans le titre, le résumé, lien-tableaux:
Et bien sûr, il prend également en charge les techniques de base, CSS 3 sélecteurs, XPath 2 et XQuery 1 expressions.
Le seul problème est que j'ai été assez stupide pour faire un Free Pascal de la bibliothèque. Mais il est également indépendante de la langue web démo.
Scrubyt utilise Ruby et Hpricot de faire de belles et facile sur le web scraping. J'ai écrit un grattoir pour mon université du service de bibliothèque à l'aide de ce dans près de 30 minutes.
Pour ceux qui préfèrent un graphique de l'outil de workflow, RapidMiner (FOSS) a une belle analyse web et de grattage de la facilité.
Voici une série de vidéos:
http://vancouverdata.blogspot.com/2011/04/rapidminer-web-crawling-rapid-miner-web.html
Quand il s'agit de l'extraction de données à partir d'un document HTML sur le serveur-côté, Node.js est une option fantastique. Je l'ai utilisé avec succès avec deux modules appelés demande et cheerio.
Vous pouvez voir un exemple de comment cela fonctionne ici.
SharpQuery
C'est essentiellement jQuery pour C#. Il dépend HTML Agility Pack pour parser le HTML.