Options pour racler HTML?

voix
378

Je pense à essayer Beautiful Soup , un paquet Python pour racler HTML. Y a-t- il des autres paquets racleurs HTML je devrais regarder? Python est pas une exigence, je suis réellement intéressé à entendre parler d' autres langues.

L'histoire jusqu'ici:

Créé 05/08/2008 à 22:09
source utilisateur
Dans d'autres langues...                            


40 réponses

voix
54

L'équivalent monde Ruby Beautiful Soup est de why_the_lucky_stiff hpricot .

Créé 05/08/2008 à 22:13
source utilisateur

voix
39

Dans le monde .NET, je recommande le HTML Agility Pack. Pas loin d'être aussi simple que quelques-unes 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é XML, vous pouvez donc utiliser XPath ou tout simplement itereate sur les nœuds.

http://www.codeplex.com/htmlagilitypack

Créé 07/08/2008 à 19:38
source utilisateur

voix
32

BeautifulSoup est un excellent moyen d'aller racler HTML. Mon travail précédent m'a fait faire beaucoup de grattage et je souhaite que je connaissais BeautifulSoup quand j'ai commencé. Il est comme les DOM avec beaucoup d'options plus utiles et est beaucoup plus pythonique. Si vous voulez essayer Ruby ils BeautifulSoup appeler portés RubyfulSoup mais il n'a pas été mis à jour en temps.

D'autres outils utiles sont HTMLParser ou sgmllib.SGMLParser qui font partie de la bibliothèque standard de Python. Ces travaux en appelant des méthodes chaque fois que vous entrez dans / sortie et une balise html texte rencontre. Ils sont comme Expat si vous êtes au courant. Ces bibliothèques sont particulièrement utiles si vous allez analyser des fichiers très volumineux et créer un arbre 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 si vous avez besoin de leur pouvoir, vous pouvez l'utiliser là-bas. Je dis aller avec BeautifulSoup à moins que vous avez besoin de vitesse et une plus petite empreinte mémoire. Si vous trouvez un meilleur analyseur HTML sur Python, laissez-moi savoir.

Créé 07/08/2008 à 19:18
source utilisateur

voix
18

J'ai trouvé HTMLSQL être un moyen ridiculement simple à screenscrape. Il prend littéralement minutes pour obtenir des résultats avec elle.

Les requêtes sont super-intuitive - comme:

SELECT title from img WHERE $class == 'userpic'

Il y a maintenant d'autres alternatives qui prennent la même approche.

Créé 07/08/2008 à 19:31
source utilisateur

voix
16

Le Python lxml agit en tant que bibliothèque de liaison Pythonic pour les bibliothèques libxml2 et libxslt. J'aime particulièrement son soutien XPath et jolie impression de la structure XML en mémoire. Il prend également en charge l' analyse syntaxique HTML cassé. Et je ne pense pas que vous pouvez trouver d' autres bibliothèques Python / liaisons qui compilent XML plus rapide que lxml.

Créé 17/09/2008 à 13:44
source utilisateur

voix
15

Pour Perl, il y a WWW :: Mechanize.

Créé 06/08/2008 à 00:37
source utilisateur

voix
11

Pourquoi ne dit JSOUP encore pour Java? http://jsoup.org/

Créé 10/02/2012 à 20:42
source utilisateur

voix
11

« Simple HTML DOM Parser » est une bonne option pour PHP, si votre familier avec sélecteurs jQuery ou JavaScript, vous vous trouverez à la maison.

Trouvez ici

Il y a aussi un billet de blog à ce sujet ici.

Créé 31/07/2009 à 20:39
source utilisateur

voix
10

Python a plusieurs options pour gratter HTML en plus de Beatiful soupe. Voici quelques autres:

  • mécaniser : similaires à Perl WWW:Mechanize. Vous donne un navigateur comme objet à ineract avec des pages web
  • lxml : la liaison Python libwww. Prise en charge diverses options pour parcourir et sélectionner des éléments (par exemple , XPath et sélection CSS)
  • scrapemark : bibliothèque de haut niveau en utilisant des modèles pour extraire des informations à partir de HTML.
  • pyquery : vous permet de faire des requêtes sur jQuery comme des documents XML.
  • scrapy : un raclement de haut niveau et cadre exploration du Web. Il peut être utilisé pour écrire des araignées, pour l' exploration de données et pour le suivi et les tests automatisés
Créé 28/12/2009 à 17:59
source utilisateur

voix
9

Le templatemaker utilitaire de Adrian Holovaty (de Django renommée) utilise une approche très intéressante: Vous ALIMENTE 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, il serait bon pour gratter tout autre contenu en texte brut aussi bien. Je l' ai utilisé aussi pour les fichiers PDF et HTML converti en texte clair (avec pdftotext et le lynx, respectivement).

Créé 18/09/2008 à 21:13
source utilisateur

voix
7

Je sais que l' amour et l' écran-grattoir .

Écran grattoir est un outil d'extraction de données à partir des sites Web. Écran Scraper automatise:

* Clicking links on websites
* Entering data into forms and submitting
* Iterating through search result pages
* Downloading files (PDF, MS Word, images, etc.)

Utilisations courantes:

* Download all products, records from a website
* Build a shopping comparison site
* Perform market research
* Integrate or migrate data

Technique:

* Graphical interface--easy automation
* Cross platform (Linux, Mac, Windows, etc.)
* Integrates with most programming languages (Java, PHP, .NET, ASP, Ruby, etc.)
* Runs on workstations or servers

Trois éditions de l'écran: gratte-

* Enterprise: The most feature-rich edition of screen-scraper. All capabilities are enabled.
* Professional: Designed to be capable of handling most common scraping projects.
* Basic: Works great for simple projects, but not nearly as many features as its two older brothers.
Créé 16/08/2009 à 21:56
source utilisateur

voix
7

Je voudrais d'abord savoir si le site (s) en question de fournir un serveur API ou Flux RSS pour accéder aux données dont vous avez besoin.

Créé 05/08/2008 à 22:11
source utilisateur


voix
5

J'ai eu un certain succès avec HtmlUnit , en Java. Il est un cadre simple pour l' écriture des tests unitaires sur l' interface utilisateur Web de, mais tout aussi utile pour racler HTML.

Créé 31/08/2008 à 13:09
source utilisateur

voix
5

Une autre option pour Perl serait Web :: Scraper qui est basé sur Ruby Scrapi . En un mot, avec la syntaxe agréable et concise, vous pouvez obtenir un grattoir robuste directement dans des structures de données.

Créé 26/08/2008 à 23:46
source utilisateur

voix
5

Grattage Stack Overflow est particulièrement facile avec chaussures et hpricot .

require 'hpricot'

Shoes.app :title => "Ask Stack Overflow", :width => 370 do
  SO_URL = "http://stackoverflow.com"
  stack do
    stack do
      caption "What is your question?"
      flow do
        @lookup = edit_line "stackoverflow", :width => "-115px"
        button "Ask", :width => "90px" do
          download SO_URL + "/search?s=" + @lookup.text do |s|
            doc = Hpricot(s.response.body)
            @rez.clear()
            (doc/:a).each do |l|
              href = l["href"]
              if href.to_s =~ /\/questions\/[0-9]+/ then
                @rez.append do
                  para(link(l.inner_text) { visit(SO_URL + href) })
                end
              end
            end
            @rez.show()
          end
        end
      end
    end
    stack :margin => 25 do
      background white, :radius => 20
      @rez = stack do
      end
    end
    @rez.hide()
  end
end
Créé 22/08/2008 à 11:20
source utilisateur

voix
4

Il y a aussi cette solution: Netty HttpClient

Créé 11/05/2011 à 19:28
source utilisateur

voix
4

Un autre outil pour .NET est MhtBuilder

Créé 13/02/2009 à 13:58
source utilisateur

voix
4

Bien qu'il ait été conçu pour .NET -test web, je l' ai utilisé le Watin cadre à cet effet. Comme il est basé DOM, il est assez facile à capturer HTML, du texte ou des images. Recentely, je l' ai utilisé pour vider une liste de liens à partir d' une MediaWiki requête namespace Toutes les pages dans une feuille de calcul Excel. Ce qui suit VB.NET Code fragement est assez brut, mais cela fonctionne.


Sub GetLinks(ByVal PagesIE As IE, ByVal MyWorkSheet As Excel.Worksheet)

    Dim PagesLink As Link
    For Each PagesLink In PagesIE.TableBodies(2).Links
        With MyWorkSheet
            .Cells(XLRowCounterInt, 1) = PagesLink.Text
            .Cells(XLRowCounterInt, 2) = PagesLink.Url
        End With
        XLRowCounterInt = XLRowCounterInt + 1
    Next
End Sub
Créé 27/08/2008 à 10:43
source utilisateur

voix
4

Je l' ai utilisé Belle soupe beaucoup avec Python. Il est beaucoup mieux que le contrôle de l' expression régulière, car elle fonctionne comme l' utilisation du DOM , même si le HTML est mal formaté. Vous pouvez trouver rapidement les balises HTML et texte avec une syntaxe plus simple que les expressions régulières. Une fois que vous trouverez un élément, vous pouvez itérer sur elle et ses enfants, ce qui est plus utile pour comprendre le contenu dans le code qu'il est avec des expressions régulières. Je souhaite belle soupe il y a existé des années quand je devais faire beaucoup de screenscraping - il aurait m'a sauvé beaucoup de temps et des maux de tête depuis la structure HTML était si pauvre avant que les gens ont commencé à le valider.

Créé 22/08/2008 à 14:58
source utilisateur

voix
4

J'utilise hpricot sur Ruby. À titre d'exemple, ceci est un extrait de code que j'utilise pour récupérer tous les titres de livres des six pages de mon compte HireThings (car ils ne semblent pas fournir une seule page avec ces informations):

pagerange = 1..6
proxy = Net::HTTP::Proxy(proxy, port, user, pwd)
proxy.start('www.hirethings.co.nz') do |http|
  pagerange.each do |page|
    resp, data = http.get "/perth_dotnet?page=#{page}" 
    if resp.class == Net::HTTPOK
      (Hpricot(data)/"h3 a").each { |a| puts a.innerText }
    end
  end
end 

Il est à peu près complet. Tout ce qui vient avant ce sont les importations bibliothèque et les paramètres de mon proxy.

Créé 06/08/2008 à 06:57
source utilisateur

voix
3

Eh bien, si vous voulez le faire à partir du côté client en utilisant uniquement un navigateur que vous avez jcrawl.com . Après avoir conçu votre service de mise au rebut de l'application Web ( http://www.jcrawl.com/app.html ), il vous suffit d'ajouter le script généré à une page HTML pour commencer à utiliser / présenter vos données.

Toute la logique qui se passe sur le casse du navigateur via JavaScript. J'espère que tu trouves cela utile. Cliquez sur ce lien pour un exemple en direct qui extrait les dernières nouvelles de Yahoo au tennis .

Créé 29/10/2012 à 16:59
source utilisateur

voix
3

Réalisation de l' algorithme d'analyse syntaxique HTML5 : html5lib (Python, Ruby), Validator.nu HTML Parser (Java, JavaScript, C ++ dans le développement), Brouhaha (C), Twintsam (C #, à venir).

Créé 09/10/2008 à 21:53
source utilisateur

voix
3

Vous seriez fou de ne pas utiliser Perl .. voici les flammes ..

Os sur les modules suivants et ginsu tout racler autour.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
Créé 17/09/2008 à 13:56
source utilisateur

voix
3

En Java, vous pouvez utiliser TagSoup .

Créé 24/08/2008 à 11:32
source utilisateur

voix
3

Je l' ai utilisé LWP et HTML :: TreeBuilder avec Perl et je les ai trouvé très utile.

LWP (abréviation de libwww-perl) vous permet de vous connecter à des sites Web et grattez le code HTML, vous pouvez obtenir le module ici et le livre O'Reilly semble être en ligne ici .

TreeBuilder vous permet de construire un arbre à partir du HTML, et la documentation et la source sont disponibles en HTML :: TreeBuilder - Parser qui construit un arbre de syntaxe HTML .

Il pourrait y avoir trop de levage lourd encore à faire avec quelque chose comme cette approche cependant. Je ne l' ai pas regardé le module de Mechanize proposé par une autre réponse, donc je peux bien faire.

Créé 17/08/2008 à 15:13
source utilisateur

voix
2

J'aime ImportXML Google Spreadsheets (URL, XPath) la fonction.

Il répétera les cellules dans la colonne si votre expression XPath retourne plus d'une valeur.

Vous pouvez avoir jusqu'à 50 importxml()fonctions sur une feuille de calcul.

Le plug - in Web RapidMiner est également très facile à utiliser. Il peut faire les messages, accepte les cookies, et peut définir l' agent utilisateur .

Créé 22/07/2010 à 05:31
source utilisateur

voix
2

J'ai aussi eu beaucoup de succès en utilisant Jaxer + jQuery de Aptana pour analyser les pages. Il 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 les pages plus compliquées (ou malformés).

Créé 19/11/2008 à 20:11
source utilisateur

voix
2

J'ai eu des résultats mitigés dans .NET à l' aide SgmlReader qui a été à l' origine par Chris Lovett et semble avoir été mis à jour par Deki .

Créé 27/08/2008 à 19:49
source utilisateur

voix
2

Vous avez probablement déjà aussi bien, mais je pense que c'est ce que vous essayez de faire:

from __future__ import with_statement
import re, os

profile = ""

os.system('wget --no-cookies --header "Cookie: soba=(SeCreTCODe)" http://stackoverflow.com/users/30/myProfile.html')
with open("myProfile.html") as f:
    for line in f:
        profile = profile + line
f.close()
p = re.compile('summarycount">(\d+)</div>') #Rep is found here
print p
m = p.search(profile)
print m
print m.group(1)
os.system("espeak \"Rep is at " + m.group(1) + " points\""
os.remove("myProfile.html")
Créé 05/08/2008 à 23:58
source utilisateur

voix
1

Je fais beaucoup de grattage web avancé si voulait avoir un contrôle total sur ma pile et comprendre les limites. Cette bibliothèque web scraping est le résultat.

Créé 12/04/2011 à 01:20
source utilisateur

voix
1

Je me sers Feedity - http://feedity.com pour certains des travaux de grattage (et la conversion en flux RSS) à ma bibliothèque. Il fonctionne bien pour la plupart des pages Web.

Créé 01/12/2010 à 06:28
source utilisateur

voix
1

Le discours récent Dav verre Bienvenue dans la jungle! (YUIConf 2011 Keynote d'ouverture) montre comment vous pouvez utiliser YUI 3 sur Node.js pour faire de la programmation clientside comme (avec sélecteurs DOM au lieu de traitement de chaîne) sur le serveur. C'est très impressionnant.

Créé 22/11/2010 à 18:04
source utilisateur

voix
1

Pour les applications plus complexes grattoirs, je recommanderais le grattoir web IRobotSoft. Il est un logiciel gratuit dédié à racler écran. Il a une langue forte de requête pour les pages HTML, et il fournit une interface d'enregistrement web très simple qui vous libérer de beaucoup d'effort de programmation.

Créé 17/05/2010 à 16:58
source utilisateur

voix
1

Scrubyt utilise Ruby et hpricot faire racler web agréable et facile. J'ai écrit un grattoir pour un service de bibliothèque de mon université en utilisant ce en 30 minutes environ.

Créé 25/08/2008 à 13:02
source utilisateur

voix
1

Les expressions régulières fonctionnent assez bien pour gratter HTML aussi bien ;-) Bien après avoir regardé Belle soupe, je peux voir pourquoi ce serait un outil précieux.

Créé 05/08/2008 à 22:29
source utilisateur

voix
0

En ce qui concerne l' extraction de données à partir d' un document HTML sur le côté serveur, 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 comment cela fonctionne ici .

Créé 10/05/2013 à 19:28
source utilisateur

voix
0

J'ai fait une bibliothèque très agréable Outils Internet pour racler Web.

L'idée est de faire correspondre un modèle contre la page Web, qui extraira toutes les données de la page et valider également si la structure de la page ne change pas.

Ainsi, vous pouvez simplement prendre le code HTML de la page Web que vous voulez traiter, supprimer tout le contenu dynamique ou hors de propos et annoter les parties intéressantes.

Par exemple, le code HTML pour une nouvelle question sur la page d'index de stackoverflow.com est:

<div id="question-summary-11326954" class="question-summary narrow">

    <!-- skipped, this is getting too long -->

    <div class="summary">

        <h3><a title="Some times my tree list have vertical scroll ,then I scrolled very fast and the tree list shivered .Have any solution for this.
" class="question-hyperlink" href="/questions/11326954/about-scroll-bar-issue-in-tree">About Scroll bar issue in Tree</a></h3>

    <!-- skipped -->

    </div>
</div>

Donc, vous supprimez tout ce certain id, titre et résumé, pour créer un modèle qui va lire toutes les nouvelles questions en titre, résumé, lien-réseaux:

 <t:loop>
   <div class="question-summary narrow">
     <div class="summary">
       <h3>
          <a class="question-hyperlink">
            {title:=text(), summary:=@title, link:=@href}
          </a>
       </h3>
     </div>
   </div>
 </t:loop>

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'étais tellement stupide de faire un Free Pascal bibliothèque. Mais il y a aussi la langue indépendante démo web .

Créé 04/07/2012 à 11:43
source utilisateur

voix
0

Pour ceux qui préféreraient un outil de workflow graphique, RapidMiner (logiciels libres) a une exploration du Web agréable et installation de grattage.

Voici une série de vidéos:

http://vancouverdata.blogspot.com/2011/04/rapidminer-web-crawling-rapid-miner-web.html

Créé 04/04/2011 à 23:44
source utilisateur

voix
-1

SharpQuery

Il est essentiellement jQuery pour C #. Cela dépend de HTML Agility pack pour analyser le code HTML.

Créé 01/12/2010 à 06:41
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more