Analyse HTML (scraping) avec JAVA

introduction

Lors du renouvellement d'un site, un travail de migration de données est souvent effectué. Vous pouvez le faire manuellement, mais cela coûte de l'argent, donc Des fonctions telles que l'acquisition HTML par lots ⇒ l'analyse ⇒ l'introduction à un nouveau système peut être utile.

En Java, une bibliothèque appelée jsoup est célèbre. En Python, une bibliothèque appelée beautifulsoup4 est célèbre.

jsoup: https://jsoup.org/ beautifulsoup4: https://pypi.org/project/beautifulsoup4/

1 jsoup jsoup est une bibliothèque JAVA pour l'analyse HTML. Vous pouvez facilement analyser le HTML avec le sélecteur de type jquery. Prend en charge les spécifications WHATWG HTML5.

1-1 Créer un projet JAVA et introduire la bibliothèque

Exemple Gradle:

// https://mvnrepository.com/artifact/org.jsoup/jsoup
compile group: 'org.jsoup', name: 'jsoup', version: '1.12.1'

1-2 Exemple d'acquisition du titre Yahoo News

1-2-1 Structure HTML

image.png

1-2-2 Code d'analyse simple pour extraire le titre et l'URL

package com.test.jsoup;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupHtmlParser {

	public static void main(String[] args) throws IOException {
		Document doc = Jsoup.connect("https://news.yahoo.co.jp").get();
		//Obtenez le tag a pour chaque article. Décrit de la même manière que le sélecteur jQuery
		Elements newsHeadlines = doc.select(".topicsList li.topicsListItem a");
		for (Element headline : newsHeadlines) {
			System.out.println("title: " + headline.ownText() + ",  href: " + headline.absUrl("href"));
		}
	}
}

1-2-3 Résultat de l'analyse

title:Tempête record causée par un typhon, tuant deux personnes,  href: https://news.yahoo.co.jp/pickup/6336014
title:L'aéroport de Narita bondé de 10000 personnes,  href: https://news.yahoo.co.jp/pickup/6336017
title:Société de sécurité 3.Arrangements pour voler 600 millions de yens,  href: https://news.yahoo.co.jp/pickup/6336018
title:Problèmes de normalisation du calendrier de suspension prévu,  href: https://news.yahoo.co.jp/pickup/6336013
title:Un étudiant bourdonnant pleure 50 fois en feu,  href: https://news.yahoo.co.jp/pickup/6335993
title:Coupe du monde de basketball 5e défaite 3P Tout supprimer,  href: https://news.yahoo.co.jp/pickup/6336020
title:Se retirer de l'Association sportive professionnelle de la CNLC,  href: https://news.yahoo.co.jp/pickup/6336015
title:Ryo Yoshizawa "Pression inhabituelle",  href: https://news.yahoo.co.jp/pickup/6336022

1-3 Analyse des chaînes HTML

1-3-1 Échantillon d'analyse

package com.test.jsoup;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupHtmlParser {

	public static void main(String[] args) throws IOException {
		String html = "<h1>Analyse des fragments HTML</h1><div><p>P1</p>";
		Document doc = Jsoup.parseBodyFragment(html);
		
		//Si vous sortez le document tel quel, html,Une balise body a été ajoutée, soyez donc prudent lors de l'analyse des fragments.
		System.out.println(doc.html());
		
		System.out.println("==========================");
		
		//Éléments de sortie du corps
		Element body = doc.body();
		System.out.println(body.html());
	}
}

1-3-2 Résultat de l'analyse

<html>
 <head></head>
 <body>
  <h1>Analyse des fragments HTML</h1>
  <div>
   <p>P1</p>
  </div>
 </body>
</html>
==========================
<h1>Analyse des fragments HTML</h1>
<div>
 <p>P1</p>
</div>

En outre, il existe des exemples de code faciles à comprendre sur le site, tels que l'analyse HTML, l'extraction de données et la correction de données à partir de fichiers. https://jsoup.org/cookbook/input/load-document-from-file

c'est tout

Recommended Posts

Analyse HTML (scraping) avec JAVA
Développement HTML5 par Java avec TeaVM
Préparer un environnement de scraping avec Docker et Java
Installez java avec Homebrew
Changer de siège avec Java
Installez Java avec Ansible
Téléchargement confortable avec JAVA
Pratique de grattage avec Java ②
Changer java avec direnv
Pratique du grattage avec Java ①
Téléchargement Java avec Ansible
Raclons avec Java! !!
Construire Java avec Wercker
Conversion Endian avec JAVA
(Java) BDD facile avec Spectrum?
Utiliser des couches Lambda avec Java
Créer un multi-projet Java avec Gradle
Premiers pas avec Java Collection
[Java / Kotlin] Traitement d'échappement (désinfection) pour HTML5 avec unbescape [Spring Boot]
Configuration Java avec Spring MVC
Authentification de base avec Java 11 HttpClient
Expérimentons l'expansion en ligne Java
Exécuter un lot avec docker-compose avec Java batch
[Template] Connexion MySQL avec Java
Réécrire Java try-catch avec facultatif
Installez Java 7 avec Homebrew (cask)
[Java] Communication JSON avec jackson
Java pour jouer avec Function
Essayez de gratter en utilisant Java [Note]
Activer Java EE avec NetBeans 9
[Java] JavaConfig avec classe interne statique
Exploitons Excel avec Java! !!
Gestion des versions Java avec SDKMAN
Cryptage / décryptage RSA avec Java 8
Pagination de PDF avec Java + PDFBox.jar
Implémentation d'un analyseur de syntaxe mathématique par méthode d'analyse syntaxique descendante récursive (Java)
[Java] Acquisition de contenu avec HttpCliient
Gestion des versions Java avec jenv
Dépannage avec Java Flight Recorder
2 Implémentez une analyse syntaxique simple en Java
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Erreur lors de la lecture avec java
Premiers pas avec les bases de Java
Scraping Web facile avec Jsoup
Affichage saisonnier avec commutateur Java
Utiliser SpatiaLite avec Java / JDBC
Comparez Java 8 en option avec Swift
Exécuter Java VM avec Web Assembly
Transition d'écran avec swing, java
Test unitaire Java avec Mockito
[Java 8] Suppression en double (et vérification en double) avec Stream
Expression lambda Java apprise avec Comparator
Construire un projet Java avec Gradle
Installer Java avec Docker basé sur Ubuntu 16.04
Java pour apprendre avec les ramen [Partie 1]
Analyse morphologique en Java avec Kuromoji
Utiliser java avec MSYS et Cygwin
Traçage distribué avec OpenCensus et Java
BDD Java 100% pur avec JGiven (Introduction)