¿Puede proporcionar ejemplos de análisis de HTML?

Resuelto Chas. Owens asked hace 15 años • 0 respuestas

¿Cómo se analiza HTML con una variedad de idiomas y bibliotecas de análisis?


Al responder:

Se vincularán comentarios individuales en respuestas a preguntas sobre cómo analizar HTML con expresiones regulares como una forma de mostrar la forma correcta de hacer las cosas.

En aras de la coherencia, solicito que el ejemplo analice un archivo HTML para las hrefetiquetas de anclaje. Para facilitar la búsqueda de esta pregunta, le pido que siga este formato.

Idioma: [nombre del idioma]

Biblioteca: [nombre de la biblioteca]

[example code]

Haga de la biblioteca un enlace a la documentación de la biblioteca. Si desea proporcionar un ejemplo además de extraer enlaces, incluya también:

Propósito: [lo que hace el análisis]

Chas. Owens avatar Apr 21 '09 22:04 Chas. Owens
Aceptado

Idioma: JavaScript
Biblioteca: jQuery

$.each($('a[href]'), function(){
    console.debug(this.href);
});

(usando firebug console.debug para la salida...)

Y cargando cualquier página html:

$.get('http://stackoverflow.com/', function(page){
     $(page).find('a[href]').each(function(){
        console.debug(this.href);
    });
});

Usé otra función para esta, creo que es más limpio al encadenar métodos.

Ward Werbrouck avatar Apr 21 '2009 18:04 Ward Werbrouck

Idioma: C#
Biblioteca: HtmlAgilityPack

class Program
{
    static void Main(string[] args)
    {
        var web = new HtmlWeb();
        var doc = web.Load("http://www.stackoverflow.com");

        var nodes = doc.DocumentNode.SelectNodes("//a[@href]");

        foreach (var node in nodes)
        {
            Console.WriteLine(node.InnerHtml);
        }
    }
}
alexn avatar Apr 21 '2009 17:04 alexn

Idioma: Biblioteca Python
: BeautifulSoup

from BeautifulSoup import BeautifulSoup

html = "<html><body>"
for link in ("foo", "bar", "baz"):
    html += '<a href="http://%s.com">%s</a>' % (link, link)
html += "</body></html>"

soup = BeautifulSoup(html)
links = soup.findAll('a', href=True) # find <a> with a defined href attribute
print links  

producción:

[<a href="http://foo.com">foo</a>,
 <a href="http://bar.com">bar</a>,
 <a href="http://baz.com">baz</a>]

también es posible:

for link in links:
    print link['href']

producción:

http://foo.com
http://bar.com
http://baz.com
Paolo Bergantino avatar Apr 21 '2009 16:04 Paolo Bergantino

Idioma: Perl
Biblioteca: pQuery

use strict;
use warnings;
use pQuery;

my $html = join '',
    "<html><body>",
    (map { qq(<a href="http://$_.com">$_</a>) } qw/foo bar baz/),
    "</body></html>";

pQuery( $html )->find( 'a' )->each(
    sub {  
        my $at = $_->getAttribute( 'href' ); 
        print "$at\n" if defined $at;
    }
);
draegtun avatar Apr 21 '2009 20:04 draegtun


lenguaje: biblioteca shell : lynx (bueno, no es una biblioteca, pero en shell, cada programa es una especie de biblioteca)

lynx -dump -listonly http://news.google.com/
 avatar Apr 21 '2009 16:04