Question

Je souhaite obtenir des données à partir de différentes pages Web, telles que les adresses de restaurants ou les dates d'événements différents pour un lieu donné, etc. Quelle est la meilleure bibliothèque que je peux utiliser pour extraire ces données d'un ensemble de sites donné?

Était-ce utile?

La solution

Si vous utilisez python, regardez bien Beautiful Soup ( http://crummy.com/software/BeautifulSoup ).

Une bibliothèque extrêmement performante facilite grandement le travail de grattage.

Autres conseils

Le pack d'agilité HTML pour les programmeurs .net est génial. Il transforme les pages Web en documents XML pouvant être interrogés avec XPath.

HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a@href")
{
HtmlAttribute att = link"href";
att.Value = FixLink(att);
}
doc.Save("file.htm");

Vous pouvez le trouver ici. http://www.codeplex.com/htmlagilitypack

Je pense que la solution générale consiste à utiliser n’importe quel langage + bibliothèque http + analyseur HTML / xpath. Je trouve que l'utilisation de ruby ??+ hpricot donne une solution propre et agréable:

require 'rubygems'
require 'hpricot'
require 'open-uri'

sites = %w(http://www.google.com http://www.stackoverflow.com)

sites.each do |site|
  doc = Hpricot(open(site))

  # iterate over each div in the document (or use xpath to grab whatever you want)
  (doc/"div").each do |div|
    # do something with divs here
  end
end

Pour plus d'informations sur Hpricot, voir http://code.whytheluckystiff.net/hpricot/

J'aime personnellement le WWW :: Mechanize du module Perl pour ce type de les tâches. Il vous donne un objet modélisé d'après un navigateur Web typique (vous pouvez suivre des liens, remplir des formulaires ou utiliser le bouton "Retour" en appelant des méthodes dessus.

Pour extraire le contenu réel, vous pouvez le connecter au HTML :: TreeBuilder pour transformer le site Web que vous visitez actuellement en une arborescence de HTML :: Élément et extrayez les données souhaitées (la méthode look_down () de HTML :: Element est particulièrement utile).

Je pense que le watir ou le sélénium sont les meilleurs choix. La plupart des autres bibliothèques citées sont en réalité des analyseurs HTML, et ce n'est pas ce que vous voulez ... Vous êtes en train de gratter, si le propriétaire du site Web voulait que vous obteniez ses données, il mettrait une sauvegarde de sa base de données ou de son site sur torrent et évitez toutes les requêtes http et le trafic coûteux.

En gros, vous devez analyser le code HTML, mais surtout automatiser un navigateur. Ceci au point de pouvoir déplacer la souris et cliquer, imitant fondamentalement vraiment un utilisateur. Vous devez utiliser un programme de capture d’écran pour accéder aux captchas et les envoyer à decaptcha.com (qui les résout pour une fraction de cent) pour les éviter. oubliez de sauvegarder ce fichier captcha en analysant le code HTML sans le rendre dans un navigateur "tel qu'il est censé être vu". Vous faites de la capture d'écran, pas de httprequestscraping.

watir a fait le bon travail pour moi en combinaison avec autoitx (pour déplacer la souris et saisir les clés dans des champs - > cela est parfois nécessaire pour définir les événements javascript appropriés) et un simple utilitaire de capture d'écran pour les captcha. De cette façon, vous aurez beaucoup de succès, il est inutile d'écrire un excellent analyseur syntaxique html pour savoir que le propriétaire du site a transformé une partie du texte en graphisme. (Problématique? Non, il suffit d’obtenir une bibliothèque OCR et d’alimenter le fichier jpeg, le texte sera renvoyé). En outre, je les ai rarement vues aller aussi loin, bien que sur les sites chinois, il y ait beaucoup de texte dans les graphiques.

Xpath m'a gardé toute la journée, c'est un super langage spécifique au domaine (IMHO, je peux me tromper) et vous pouvez accéder à n'importe quel tag de la page, même si vous devez parfois le modifier.

Ce que j’ai manqué, c’est les «modèles inversés» (le cadre du robot en sélénium contient cela). Perl avait ceci dans le module CPAN Template :: Extract, très pratique.

L'analyse HTML, ou la création du DOM, je la laisserais au navigateur, oui, ce ne sera pas aussi rapide, mais cela fonctionnera tout le temps.

De même, les bibliothèques qui prétendent être des useragents sont inutiles, les sites sont désormais protégés contre le frottement, et le rendu du site sur un écran réel est souvent nécessaire pour aller au-delà du captcha, mais aussi des événements javascript qui doivent être déclenchés pour information. apparaître etc.

Watir si tu aimes Ruby, Selenium pour le reste, je dirais. L'émulateur humain (ou l'émulateur Web en Russie) est vraiment conçu pour ce type de grattage, mais c'est un produit russe d'une société qui ne cache pas ses intentions.

Je pense aussi que l'une de ces semaines, Wiley a publié un nouveau livre sur le raclage, cela devrait être intéressant. Bonne chance ...

Je trouve personnellement http://github.com/shuber/curl/tree/master et http://simplehtmldom.sourceforge.net/ génial pour une utilisation dans mon PHP spidering / scraping projets.

Je voudrais utiliser LWP (Libwww pour Perl). Voici un bon petit guide: http: //www.perl. com / pub / a / 2002/08/20 / perlandlwp.html

WWW :: Scraper a docs ici: http: //cpan.uwinnipeg .ca / htdocs / Scraper / WWW / Scraper.html Cela peut être utile comme base, vous voudrez probablement créer votre propre module qui répond aux besoins de votre restaurant en matière d’exploitation minière.

LWP vous donnerait un robot de base sur lequel vous pourrez construire.

Il y a eu plusieurs réponses recommandant Perl Mechanize, mais je pense que Ruby Mechanize (très similaire à la version de Perl) est encore meilleur. Il gère certaines choses comme les formulaires d'une manière beaucoup plus propre syntaxiquement. De plus, il existe quelques interfaces qui sur de Ruby Mechanize facilitent encore les choses.

Quelle langue voulez-vous utiliser?

curl avec awk pourrait être tout ce dont vous avez besoin.

Vous pouvez utiliser ranger pour le convertir en XHTML, puis utiliser les fonctions de traitement XML de votre langue. choix a disponible.

Je recommanderais BeautifulSoup . Ce n’est pas le plus rapide, mais fonctionne très bien en ce qui concerne la non-bonne formation des pages (X) HTML sur lesquelles la plupart des analyseurs syntaxiques s’étouffent.

ce que quelqu'un a dit.

utilisez N'IMPORTE QUELLE LANGUE.

tant que vous avez une bonne bibliothèque d'analyseur et une bibliothèque http, vous êtes prêt.

l'arborescence est plus lente, puis utilisez simplement une bonne bibliothèque d'analyse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top