Pregunta

Tengo un par de sitios web que desee para extraer datos desde y sobre la base de experiencias anteriores, esto no es tan fácil como suena. ¿Por qué? Simplemente porque las páginas HTML que tiene que analizar no tengan el formato correcto (falta la etiqueta de cierre, etc.).

Teniendo en cuenta que no tengo limitaciones en cuanto a la tecnología, el lenguaje o herramienta que puedo usar, ¿cuáles son sus sugerencias para analizar fácilmente y extraer datos de páginas HTML ? He tratado HTML agilidad paquete, BeautifulSoup, e incluso estas herramientas no son perfectos (HTML agilidad paquete está libre de errores, y BeautifulSoup motor de análisis no funciona con las páginas que estoy pasando a ella).

Gracias!

¿Fue útil?

Solución

Puede utilizar casi cualquier idioma que desee simplemente no tratar de analizar HTML con expresiones regulares.

Así que permítanme expresarlo de otro modo y decir: se puede usar cualquier idioma que desee que tiene un analizador de HTML, que es casi todo inventado en los últimos 15-20 años

.

Si usted está teniendo problemas con las páginas en particular le sugiero que busque en la reparación de ellos con HTML Tidy .

Otros consejos

Creo hpricot (vinculado por Colin Pickard) es as. Añadir scrubyt a la mezcla y se obtiene una gran raspado y html interfaz de navegación con el poder de texto coincidente Rubí http://scrubyt.org /

Aquí hay un código de ejemplo 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

Como el lenguaje Java y como una biblioteca de código abierto Jsoup será una solución bastante para usted.

hpricot puede ser lo que buscas.

Puede intentar DOMDocument clase de PHP. Tiene un par de métodos para cargar contenido HTML. Normalmente suelo hacer uso de esta clase. Mi asesora son anteponer un elemento DOCTYPE en el HTML en caso de que no tiene uno y Firebug para inspeccionar en el código HTML que resulta después de analizar. En algunos casos, cuando se encontró marcas inválidas, DOMDocument hace un poco de reordenación de los elementos HTML. Además, si hay una etiqueta meta especifica el juego de caracteres dentro de la fuente tenga cuidado de que va a ser utilizado internamente por libxml al analizar el margen de beneficio. He aquí un pequeño ejemplo

$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();

Cualquier lenguaje que trabaja con HTML en el nivel de DOM es buena.

para Perl es el módulo HTML :: TreeBuilder.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top