69 votes

Pouvez-vous donner des exemples de l'analyse de l'HTML?

Comment parser du HTML avec une variété de langues et de bibliothèques d'analyse?


Lorsque vous répondez:

Commentaires individuels sera lié dans les réponses à des questions sur la façon d'analyser HTML avec regexes comme une façon de montrer la bonne façon de faire les choses.

Par souci de cohérence, je demande que l'exemple de l'analyse d'un fichier HTML de l' href dans les balises d'ancrage. Pour faciliter la recherche à cette question, je vous demande de suivre ce format

Langue: [nom de la langue]

Bibliothèque: [nom de la bibliothèque]

[example code]

Merci de faire de la bibliothèque un lien vers la documentation pour la bibliothèque. Si vous voulez donner un exemple autre que l'extraction de liens, veuillez également inclure:

Objet: [ce que l'analyse n']

29voto

Ward Werbrouck Points 1172

Langue: JavaScript
Bibliothèque: jQuery

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

(à l'aide de la console de firebug.débogage pour la sortie...)

Et de chargement d'une page html:

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

Utilisé une autre fonction pour celui-ci, je pense que c'est plus propre quand le chaînage de méthodes.

25voto

alexn Points 25639

Langage: C#
Bibliothèque: 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);
    	}
    }
}

22voto

Paolo Bergantino Points 199336

langue: Python
bibliothèque: 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

sortie:

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

aussi possible:

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

sortie:

http://foo.com
http://bar.com
http://baz.com

20voto

draegtun Points 17081

Langage: Perl
Bibliothèque: 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;
    }
);

/I3az/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X