Options de grattage HTML?

Translate

Je pense essayerBelle soupe, un package Python pour le scraping HTML. Y a-t-il d'autres packages de scraping HTML que je devrais examiner? Python n'est pas une exigence, je suis également intéressé à entendre parler d'autres langages.

L'histoire jusqu'ici:

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

L'équivalent du monde de rubis à Beautiful Soup est pourquoi_the_lucky_stiff'sHpricot.

La source
Webster Lee
Translate

Dans le monde .NET, je recommande le HTML Agility Pack. Pas aussi simple que certaines des options ci-dessus (comme HTMLSQL), mais c'est très flexible. Il vous permet de manipuler du HTML mal formé comme s'il s'agissait de XML bien formé, vous pouvez donc utiliser XPATH ou simplement itérer sur des nœuds.

http://www.codeplex.com/htmlagilitypack

La source
Mamie Lee
Translate

BeautifulSoup est un excellent moyen de faire du scraping HTML. Mon travail précédent m'avait fait beaucoup de grattage et j'aurais aimé connaître BeautifulSoup quand j'ai commencé. C'est comme le DOM avec beaucoup plus d'options utiles et est beaucoup plus pythonique. Si vous voulez essayer Ruby, ils ont porté BeautifulSoup en l'appelant RubyfulSoup mais il n'a pas été mis à jour depuis un moment.

D'autres outils utiles sont HTMLParser ou sgmllib.SGMLParser qui font partie de la bibliothèque Python standard. Celles-ci fonctionnent en appelant des méthodes chaque fois que vous entrez / sortez d'une balise et rencontrez du texte html. Ils sont comme Expat si vous connaissez cela. Ces bibliothèques sont particulièrement utiles si vous allez analyser des fichiers très volumineux et créer une arborescence DOM serait longue et coûteuse.

Les expressions régulières ne sont pas très nécessaires. BeautifulSoup gère les expressions régulières, donc si vous avez besoin de leur puissance, vous pouvez l'utiliser là-bas. Je dis d'aller avec BeautifulSoup sauf si vous avez besoin de vitesse et d'une plus petite empreinte mémoire. Si vous trouvez un meilleur analyseur HTML sur Python, faites-le moi savoir.

La source
Colbert Lee
Translate

j'ai trouvéHTMLSQLêtre un moyen ridiculement simple de faire des captures d'écran. Cela prend littéralement quelques minutes pour obtenir des résultats.

Les requêtes sont super intuitives - comme:

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

Il existe maintenant d'autres alternatives qui adoptent la même approche.

La source
Translate

Le PythonlxmlLa bibliothèque agit comme une liaison Pythonic pour les bibliothèques libxml2 et libxslt. J'aime particulièrement son support XPath et sa jolie impression de la structure XML en mémoire. Il prend également en charge l'analyse du HTML cassé. Et je ne pense pas que vous puissiez trouver d'autres bibliothèques / liaisons Python qui analysent XML plus rapidement que lxml.

La source
Yetta Lee
Translate

Pour Perl, il y a WWW :: Mechanize.

La source
Translate

Python a plusieurs options pour le scraping HTML en plus de Beatiful Soup. En voici quelques autres:

  • mécaniser: similaire à perlWWW:Mechanize. Vous donne un objet de type navigateur pour interagir avec les pages Web
  • lxml: Liaison Python àlibwww. Prend en charge diverses options pour parcourir et sélectionner des éléments (par exempleXPathet sélection CSS)
  • scrapemark: bibliothèque de haut niveau utilisant des modèles pour extraire des informations du HTML.
  • pyquery: vous permet de créer jQuery comme des requêtes sur des documents XML.
  • éraflure: un framework de scraping et d'exploration Web de haut niveau. Il peut être utilisé pour écrire des araignées, pour l'exploration de données et pour la surveillance et les tests automatisés
La source
Mortimer Lee
Translate

«Simple HTML DOM Parser» est une bonne option pour PHP, si vous êtes familier avec les sélecteurs jQuery ou JavaScript, vous vous retrouverez chez vous.

Trouvez-le ici

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

La source
Kitty Lee
Translate

Pourquoi personne n'a encore mentionné JSOUP pour Java?http://jsoup.org/

La source
Honey Lee
Translate

lefabricant de modèlesutilitaire d'Adrian Holovaty (deDjangofame) utilise une approche très intéressante: vous l'alimentez en variations de la même page et il "apprend" où se trouvent les "trous" pour les données variables. Ce n'est pas spécifique au HTML, donc ce serait également bon pour tout autre contenu en clair. Je l'ai également utilisé pour les PDF et HTML convertis en texte brut (avec pdftotext et lynx, respectivement).

La source
Translate

Je voudrais d'abord savoir si le ou les sites en question fournissent un serveur API ou des flux RSS pour accéder aux données dont vous avez besoin.

La source
Julie Lee
Translate

Je connais et j'aimeGrattoir à tamis.

Screen-Scraper est un outil pour extraire des données de sites Web. Screen-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 grattoir d'écran:

* 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.
La source
Maud Lee
Translate

Une autre option pour Perl seraitWeb :: Grattoirqui est basé sur RubyScrapi. En un mot, avec une syntaxe agréable et concise, vous pouvez obtenir un grattoir robuste directement dans les structures de données.

La source
Translate

Le débordement de la pile de raclage est particulièrement facile avecChaussuresetHpricot.

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
La source
Alger Lee
Translate

J'ai eu du succès avecHtmlUnit, en Java. C'est un cadre simple pour écrire des tests unitaires sur des interfaces utilisateur Web, mais également utile pour le scraping HTML.

La source
Gary Lee
Translate

Un autre outil pour .NET estMhtBuilder

La source
Translate

Il y a aussi cette solution:netty HttpClient

La source
Translate

J'utilise Hpricot sur Ruby. À titre d'exemple, voici 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 

C'est à peu près complet. Tout ce qui précède, ce sont les importations de bibliothèques et les paramètres de mon proxy.

La source
Translate

J'ai beaucoup utilisé Beautiful Soup avec Python. C'est bien mieux que la vérification des expressions régulières, car cela fonctionne comme utiliserDOM, même si le HTML est mal formaté. Vous pouvez trouver rapidement des balises HTML et du texte avec une syntaxe plus simple que les expressions régulières. Une fois que vous avez trouvé un élément, vous pouvez parcourir celui-ci et ses enfants, ce qui est plus utile pour comprendre le contenu du code qu'avec les expressions régulières. J'aurais aimé que Beautiful Soup existe il y a des années, alors que je devais faire beaucoup de captures d'écran - cela m'aurait fait gagner beaucoup de temps et de maux de tête car la structure HTML était si pauvre avant que les gens ne commencent à la valider.

La source
Translate

Bien qu'il ait été conçu pour.NETweb-testing, j'utilise leWatiNcadre à cet effet. Comme il est basé sur DOM, il est assez facile de capturer du HTML, du texte ou des images. Récemment, je l'ai utilisé pour vider une liste de liens à partir d'unMediaWikiRequête d'espace de noms Toutes les pages dans une feuille de calcul Excel. Le suivantVB.NETle code fragement est assez grossier, 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
La source
Florence Lee
Translate

Implémentations duAlgorithme d'analyse HTML5: html5lib(Python, Rubis),Analyseur HTML Validator.nu(Java, JavaScript; C ++ en développement),Brouhaha(C),Twintsam(C #; à venir).

La source
Isaac Lee
Translate

Vous seriez idiot de ne pas utiliser Perl .. Voici les flammes ..

Bone up sur les modules suivants et ginsu toute gratte autour.

use LWP
use HTML::TableExtract
use HTML::TreeBuilder
use HTML::Form
use Data::Dumper
La source
Translate

j'ai utiliséLWPetHTML :: TreeBuilderavec Perl et les ont trouvés très utiles.

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

TreeBuilder vous permet de construire une arborescence à partir du HTML, etla documentation et la source sont disponibles dansHTML :: TreeBuilder - Analyseur qui construit une arborescence de syntaxe HTML.

Il y a peut-être trop de choses à faire avec quelque chose comme cette approche. Je n'ai pas regardé leModule de mécanisationsuggéré par une autre réponse, alors je peux bien le faire.

La source
Translate

En Java, vous pouvez utiliserTagSoup.

La source
Translate

Eh bien, si vous voulez que cela soit fait du côté client en utilisant uniquement un navigateur que vous avezjcrawl.com. Après avoir conçu votre service de mise au rebut depuis 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 de mise au rebut se produit sur le navigateur via JavaScript. J'espère que tu trouves cela utile. Cliquez sur ce lien pour un exemple en direct qui extrait ledernières nouvelles de Yahoo tennis.

La source
Marcus Lee
Translate

Vous en avez probablement déjà autant, 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")
La source
Virgil Lee
Translate

J'ai eu des résultats mitigés dans .NET en utilisant SgmlReader qui a été initialement lancé parChris Lovettet semble avoir été mis à jour parMindTouch.

La source
Translate

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

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

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

Le plugin Web de RapidMiner est également assez facile à utiliser. Il peut publier des messages, accepter les cookies et définir leagent utilisateur.

La source
Translate

J'ai également eu beaucoup de succès en utilisant Jaxer + jQuery d'Aptana pour analyser des pages. Ce n'est pas aussi rapide ou de nature `` script-like '', mais les sélecteurs jQuery + le vrai JavaScript / DOM sont une bouée de sauvetage sur les pages plus compliquées (ou mal formées).

La source