Comment analyser une page web et extraire tous les liens href?
Je veux analyser une page web dans Groovy et extrait tous les liens href et le texte associé avec elle.
Si la page contenant ces liens:
<a href="http://www.google.com">Google</a><br />
<a href="http://www.apple.com">Apple</a>
la sortie serait:
Google, http://www.google.com<br />
Apple, http://www.apple.com
Je suis à la recherche d'un Groovy réponse. AKA. Le moyen le plus facile!
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
En supposant bien formée XHTML, buvez du xml, de recueillir toutes les balises, retrouvez la 'une' de balises et d'imprimer le href et le texte.
Une rapide recherche sur google mis en place un joli possibilité, TagSoup.
Je ne sais pas java, mais je pense que xpath est beaucoup mieux que le classique des expressions régulières afin d'obtenir une (ou plusieurs) des éléments html.
Il est aussi plus facile à écrire et à lire.
Avec le code html ci-dessus, cette expression "/html/body/une" liste de tous href éléments.
Voici une bonne étape par étape tutoriel http://www.zvon.org/xxl/XPathTutorial/General/examples.html
Utilisation XMLSlurper pour analyser le code HTML sous la forme d'un document XML et ensuite utiliser la méthode find avec une fermeture appropriée pour sélectionner l'une des balises et ensuite utiliser la méthode de la liste sur GPathResult pour obtenir une liste des tags. Vous devriez alors être en mesure d'extraire le texte en tant qu'enfants de la GPathResult.
Essayer une expression régulière. Quelque chose comme ceci devrait fonctionner:
Prendre un coup d'oeil à Groovy - Tutoriel 4 - notions de base des expressions Régulières et Balise D'Ancrage Expression Régulière Rupture.
L'analyse en utilisant XMlSlurper ne fonctionne que si le HTMl est bien formé.
Si votre page HTMl n'est pas bien formé balises, puis utiliser des regex pour l'analyse de la page.
Ex:
<a href="www.google.com">
ici, 'a' n'est pas fermé et ne sont donc pas bien formé.
Analyseur Html + les expressions Régulières
N'importe quelle langue serait-il le faire, mais je dirais que Perl est la solution la plus rapide.