Domanda

Ho un paio di siti web che voglio per estrarre dati da e sulla base di esperienze precedenti, questo non è così facile come suono. Perché? Semplicemente perché le pagine HTML che ho per analizzare non sono adeguatamente formattato (mancante tag di chiusura, ecc.).

Considerando che non ho vincoli per quanto riguarda la tecnologia, lingua o strumento che posso usare, quali sono i vostri suggerimenti per analizzare facilmente ed estrarre i dati da pagine HTML ? Ho provato HTML Agility Pack, BeautifulSoup, e anche questi strumenti non sono perfetti (HTML Agility Pack è bacato, e BeautifulSoup motore di analisi non funziona con le pagine che sto passando ad esso).

Grazie!

È stato utile?

Soluzione

È possibile utilizzare praticamente qualsiasi lingua che ti piace semplicemente non cercare di analizzare HTML con le espressioni regolari.

Quindi, mi permetta di riformulare questo e dico: è possibile utilizzare qualsiasi lingua che ti piace che ha un parser HTML, che è praticamente tutto inventato negli ultimi 15-20 anni

.

Se hai problemi con le pagine particolari Vi suggerisco di guardare in loro riparazione con HTML Tidy .

Altri suggerimenti

Credo hpricot (legati da Colin Pickard) è asso. Aggiungere scrubyt per il mix e si ottiene un grande html raschiatura e interfaccia di navigazione con la potenza corrispondente testo di Ruby http://scrubyt.org /

qui è qualche esempio di codice da http://github.com/scrubber /scrubyt_examples/blob/7a219b58a67138da046aa7c1e221988a9e96c30e/twitter.rb

require 'rubygems'
require 'scrubyt'

# Simple exmaple for scraping basic
# information from a public Twitter
# account.

# Scrubyt.logger = Scrubyt::Logger.new

twitter_data = Scrubyt::Extractor.define do
  fetch 'http://www.twitter.com/scobleizer'

  profile_info '//ul[@class="about vcard entry-author"]' do
    full_name "//li//span[@class='fn']"
    location "//li//span[@class='adr']"
    website "//li//a[@class='url']/@href"
    bio "//li//span[@class='bio']"
  end
end

puts twitter_data.to_xml

Per quanto linguaggio Java e come libreria open source Jsoup sarà una bella soluzione per voi.

hpricot può essere quello che stai cercando.

Si può provare a DOMDocument classe di PHP. Ha un paio di metodi per il caricamento del contenuto HTML. Di solito io faccio uso di questa classe. I miei consigli sono ad anteporre un elemento DOCTYPE al codice HTML nel caso non ha uno e per ispezionare in Firebug il codice HTML che risulta dopo l'analisi. In alcuni casi, dove si incontra codice non valido, DOMDocument fa un po 'di riarrangiamento degli elementi HTML. Inoltre, se c'è un meta tag che specifica il set di caratteri all'interno della sorgente fare attenzione che sarà utilizzato internamente da libxml durante l'analisi del markup. Ecco un piccolo esempio

$html = file_get_contents('http://example.com');

$dom = new DOMDocument;
$oldValue = libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_use_internal_errors($oldValue);

echo $dom->saveHTML();

Ogni lingua che lavora con HTML a livello DOM è buono.

per il Perl è il modulo HTML :: TreeBuilder.

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