Domanda

Sto pensando di provare Bella Zuppa, un pacchetto Python per HTML raschiare.Ci sono eventuali altri HTML raschiare pacchetti dovrei essere guardando?Python non è un requisito, in realtà io sono interessato a sentir parlare di altre lingue.

La storia finora:

È stato utile?

Soluzione

Il mondo Ruby è equivalente a Bella Zuppa è why_the_lucky_stiff s Hpricot.

Altri suggerimenti

Nell' .NET world, mi raccomando HTML Agilità Pack.Non vicino come semplice come alcune delle opzioni di cui sopra (come HTMLSQL), ma è molto flessibile.Esso consente di maniuplate mal formato HTML come se fosse XML ben formato, in modo che è possibile utilizzare XPATH o semplicemente itereate sui nodi.

http://www.codeplex.com/htmlagilitypack

Coherence è un ottimo modo per andare per HTML raschiare.Il mio lavoro precedente mi aveva facendo un sacco di raschiatura e vorrei sapere su Coherence quando ho iniziato.E ' come il duomo, molto più utile di opzioni ed è molto più divinatori.Se volete provare Ruby hanno portato Coherence chiamando RubyfulSoup ma non è stato aggiornato.

Altri strumenti utili sono HTMLParser o sgmllib.SGMLParser che fanno parte della libreria standard di Python.Questi lavori, chiamando i metodi ogni volta che si entra/esci un tag e l'incontro di testo html.Sono come Expat se hai dimestichezza con.Queste librerie sono particolarmente utili se si sta andando ad analizzare i file di grandi dimensioni e la creazione di un albero DOM, sarebbe lungo e costoso.

Le espressioni regolari non sono molto necessari.Coherence gestisce le espressioni regolari, quindi se hai bisogno del loro potere, si può utilizzare, non c'è.Dico andare con Coherence a meno che non hai bisogno di velocità, e un piccolo ingombro di memoria.Se è un parser HTML su Python, fammi sapere.

Ho trovato HTMLSQL per essere un ridicolmente semplice modo per screenscrape.Prende letteralmente in pochi minuti per ottenere risultati.

Le query sono super-intuitiva - come:

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

Ora ci sono alcune altre alternative che adottare lo stesso approccio.

Il Python lxml biblioteca agisce come un Divinatori vincolante per libxml2 e libxslt librerie.Mi piace particolarmente il suo supporto di XPath e pretty-printing di XML in memoria la struttura.Supporta anche l'analisi rotto HTML.E non credo che si può trovare altre librerie Python/associazioni di analizzare XML più veloce di lxml.

Per il Perl, c'è WWW::Mechanize.

Python ha diverse opzioni per l'HTML scraping in aggiunta a Bella Zuppa.Qui ci sono alcuni altri:

  • mechanize:simile al perl WWW:Mechanize.Ti dà un browser come oggetto ineract con le pagine web
  • lxml:Python vincolante per libwww.Supporta diverse opzioni per attraversare e selezionare gli elementi (ad es. XPath e CSS selezione)
  • scrapemark:alto livello di libreria utilizzo dei modelli per estrarre informazioni da HTML.
  • pyquery:consente di effettuare jQuery like query su documenti XML.
  • scrapy:un alto livello di rottamazione e di scansione web framework.Può essere utilizzato per scrivere i ragni, per il data mining e per il monitoraggio e test automatici

E 'semplice HTML Parser DOM' è una buona opzione per PHP, se la vostra familiarità con jQuery o JavaScript selettori, allora vi troverete a casa.

Trova qui

C'è anche un post di un blog su di esso qui.

Perché nessuno ha menzionato JSOUP di sicurezza per Java? http://jsoup.org/

Il templatemaker utility da Adrian Holovaty (di Django fama) utilizza un approccio molto interessante:Si alimentano le variazioni della stessa pagina e si "impara", dove i "buchi" per i dati variabili.Non è HTML specifico, per cui sarebbe bene per raschiare qualsiasi altro testo in chiaro contenuto.Io l'ho usato anche per i Pdf e HTML del convertito a testo in chiaro (con pdftotext e la lince, rispettivamente).

Innanzitutto vorrei sapere se il sito in questione a fornire una API server o Feed RSS per accedere a dati che ti richiederà.

So che e amore Screen-Scraper.

Screen-Scraper è uno strumento per l'estrazione di dati dai siti web.Screen-Scraper automatizza:

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

Usi comuni:

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

Tecnico:

* 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

Tre edizioni di screen-scraper:

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

Un'altra opzione per il Perl sarebbe Web::Raschietto che è basato su Ruby Scrapi.In sintesi, con una bella e concisa sintassi, è possibile ottenere un robusto raschietto direttamente in strutture di dati.

Raschiatura di Overflow dello Stack, è particolarmente facile con Scarpe e 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

Ho avuto un certo successo con HtmlUnit, in Java.Si tratta di un semplice framework per scrivere unit test su interfaccia web, ma ugualmente utile per HTML raschiare.

Un altro strumento per .NET è MhtBuilder

C'è questa soluzione: netty HttpClient

Io uso Hpricot su Ruby.Ad esempio, questo è un frammento di codice che uso per recuperare tutti i titoli di libri da sei pagine del mio HireThings account (che non sembra fornire una singola pagina con queste informazioni):

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 

È praticamente completo.Tutto ciò che viene prima di questa biblioteca sono le importazioni e le impostazioni per il proxy.

Ho utilizzato Bella Zuppa molto con Python.È molto meglio di espressione regolare il controllo, perché funziona come usare il DOM, anche se il codice HTML è poco formattato.È possibile trovare rapidamente i tag HTML e di testo con una sintassi più semplice di espressioni regolari.Una volta che si trova un elemento, si può scorrere su di esso e i suoi bambini, che è il più utile per capire il contenuto nel codice che con le espressioni regolari.Desidero Bella Zuppa esisteva anni fa, quando ho avuto a che fare un sacco di screenscraping -- mi avrebbe risparmiato un sacco di tempo e mal di testa, poiché la struttura HTML è stato così povero di prima che la gente cominciasse la convalida.

Anche se è stato progettato per .NET web-test, ho usato il WatiN quadro di riferimento per questo scopo.Poiché è basato su DOM, è abbastanza facile per la cattura di HTML, testo o immagini.Recentemente, l'ho utilizzato per eseguire il dump di un elenco di link da un MediaWiki Tutte le Pagine del namespace query in un foglio di calcolo di Excel.Il seguente VB.NET codice fragement è piuttosto grezzo, ma funziona.


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

Implementazioni di HTML5 algoritmo di analisi: html5lib (Python, Ruby) Validatore.nu Parser HTML (Java, JavaScript;C++ in via di sviluppo), Chiasso (C), Twintsam (C#;imminente).

Che sarebbe un pazzo a non usare Perl..Arrivano le fiamme..

Osso su i seguenti moduli e ginsu qualsiasi raschiare intorno.

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

Ho usato LWP e HTML::TreeBuilder con Perl e ho trovato molto utile.

LWP (breve per libwww-perl) consente di connettersi a siti web e raschiare il codice HTML, è possibile ottenere il modulo qui e il libro O'Reilly sembra di essere on-line qui.

TreeBuilder consente di costruire un albero dal HTML e la documentazione di origine e sono disponibili in HTML::TreeBuilder Parser che costruisce un albero di sintassi HTML.

Ci potrebbe essere troppo pesante ancora a che fare con qualcosa di simile a questo approccio, però.Non ho guardato il Meccanizzare modulo suggerito da un'altra risposta, quindi posso anche farlo.

In Java, è possibile utilizzare TagSoup.

Beh, se vuoi farlo fare dal lato client utilizzando solo un browser jcrawl.com.Dopo aver progettato la rottamazioni dall'applicazione web (http://www.jcrawl.com/app.html), è solo bisogno di aggiungere lo script generato da una pagina HTML per iniziare a utilizzare il/la presentazione dei dati.

Tutti i rottamazione logica accade sul browser tramite JavaScript.Spero vi sia utile.Clicca su questo link per un esempio che estrae il ultime notizie da Yahoo tennis.

Probabilmente avete tanto già, ma penso che questo è ciò che si sta cercando di fare:

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

Ho avuto risultati misti in .NET utilizzando SgmlReader, che è stata originariamente iniziato da Chris Lovett e sembra essere stato aggiornato dal MindTouch.

Mi piace Fogli di lavoro Google' ImportXML(URL, XPath) funzione.

Ripeterà le cellule giù per la colonna se l'espressione XPath restituisce più di un valore.

Si possono avere fino a 50 importxml() funzioni di un foglio di calcolo.

RapidMiner Web Plugin è anche abbastanza facile da utilizzare.Si può fare di posti, accetta i cookie, e può impostare il user-agent.

Ho anche avuto un grande successo con Aptana è Jaxer + jQuery per analizzare le pagine.Non è veloce o 'script, come in natura, ma selettori jQuery + reale JavaScript/DOM è un salvagente più complessa (o non valido) pagine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top