Question

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:

Était-ce utile?

La solution

Le Rubis du monde équivalent à Belle Soupe est why_the_lucky_stiff de l' Hpricot.

Autres conseils

Dans l' .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.

D'autres outils utiles 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 pour ê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:

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

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:

  • mécaniser:semblable à perl WWW:Mechanize.Vous donne un navigateur comme objet de ineract avec des pages web
  • lxml:Binding Python pour libwww.Prend en charge diverses options pour parcourir et sélectionner des éléments (p. ex. XPath et CSS sélection)
  • scrapemark:de haut niveau de la bibliothèque à l'aide de modèles d'extraire des informations à partir de code HTML.
  • pyquery:vous permet de faire des jQuery comme des requêtes sur des documents XML.
  • scrapy:un niveau élevé de grattage et de l'analyse web-cadre.Il peut être utilisé pour écrire des araignées, pour l'exploration de données et de surveillance et de tests automatisés

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/

L' templatemaker utilitaire de Adrian Holovaty (de Django fame) utilise une approche très intéressante:Vous lui donnez les 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 le 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:

* 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-grattoir:

* 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.

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.

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

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.

Un autre outil pour .NET est MhtBuilder

Il y a cette solution: netty HttpClient

J'utilise 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):

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 

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.


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

Les implémentations de la HTML5 algorithme d'analyse d': html5lib (Python, Ruby,...), Programme de validation.nu Analyseur HTML (Java, JavaScript;C++ pour 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.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper

J'ai utilisé LWP et HTML:: "TreeBuilder" avec Perl et ont trouvé très utile.

LWP (court pour libwww-perl) vous permet de vous connecter à des sites web et gratter le 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 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 y a peut être trop lourds de levage sont encore à faire avec quelque chose comme cette approche, si.Je n'ai pas regardé l' Mécaniser module suggéré par une autre réponse, donc je peut très bien le faire.

En Java, vous pouvez utiliser TagSoup.

Eh bien, si vous voulez qu'il fait à partir du côté client en utilisant uniquement un navigateur, vous devez jcrawl.com.Après avoir conçu votre la démolition de service de l'application web (http://www.jcrawl.com/app.html), vous avez seulement besoin 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:

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")

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.

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