Notez que j'ai eu l'occasion de gratter un site Web en utilisant la bibliothèque jsoup de Java. Il existe déjà de nombreux articles qui expliquent en détail de manière facile à comprendre, mais il s'agit d'un mémo. Officiel: https://jsoup.org/
Récupérez simplement le fichier jar sur la page de téléchargement du site officiel et ajoutez-le à la bibliothèque. Il peut également être installé à partir du référentiel Maven. Si c'est gradle, ajoutez simplement la définition suivante à build.gradle (la version est la plus récente au moment de l'écriture)
build.gradle
dependencies {
compile('org.jsoup:jsoup:1.12.1')
}
Prenons comme exemple le cas de l'extraction de la date, du titre et de l'URL de "Notice" de la page suivante.
<body>
<div class="section">
<div class="block">
<dl>
<dt>2019.08.04</dt>
<dd>
<a href="http://www.example.com/notice/0003.html">Avis 3</a>
</dd>
<dt>2019.08.03</dt>
<dd>
<a href="http://www.example.com/notice/0002.html">Avis 2</a>
</dd>
<dt>2019.08.02</dt>
<dd>
<a href="http://www.example.com/notice/0001.html">Avis 1</a>
</dd>
</dl>
</div>
</div>
</body>
Extrayez avec le code suivant.
Example.java
import java.io.IOException;
import java.util.List;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
public class Example {
public static void main(String[] args) throws IOException {
//Get en envoyant une requête avec GET à l'URL spécifiée (post()POST est également possible s'il s'agit d'une méthode)
Document document = Jsoup.connect("http://www.example.com").get();
//Extrayez les éléments du document acquis avec le sélecteur CSS.
//Cet élément est dans le HTML ci-dessus<div class="block">Liste de taille 1 qui correspond à l'élément de
Elements elements = document.select(".section .block");
//Obtenez le 0e élément des éléments, puis récupérez ses éléments enfants.
// elements.get(0).childNode(0)= Dans le HTML ci-dessus<dl>Des éléments de
// elements.get(0).childNode(0).childNodes() = <dl>De l'enfant<dt>Quand<dd>Liste des éléments de
List<Node> nodeList = elements.get(0).childNode(0).childNodes();
//Extrayez la date, le titre et l'URL de la notification à partir de nodeList avec une boucle for.
for (int i = 0; i < nodeList.size() / 2; i++) {
String newsDate = nodeList.get(i * 2).toString();
String newsTitle = nodeList.get(i * 2 + 1).childNode(0).toString();
String newsUrl = nodeList.get(i * 2 + 1).childNode(0).attr("href");
System.out.println(newsDate);
System.out.println(newsTitle);
System.out.println(newsUrl);
}
}
}
La documentation des classes utilisées dans ce code est ci-dessous. Vous devriez le lire avant de l'utiliser.
Document(jsoup Java HTML Parser 1.12.1 API) Elements(jsoup Java HTML Parser 1.12.1 API) Element(jsoup Java HTML Parser 1.12.1 API) Node(jsoup Java HTML Parser 1.12.1 API)
Je l'utilise pour gratter la page d'annonce sur le site de l'école doctorale où mes proches sont inscrits.
La page «Avis de l'université» sur le site Web de l'université, en gros, seuls les avis qui ne vous concernent pas sont affichés. Les avis importants sont publiés environ une fois tous les quelques mois, vous devez donc les regarder souvent, ce qui est un problème. Par conséquent, j'ai décidé de créer un lot qui effectue le traitement suivant et de l'exécuter avec cron une fois par heure.
J'ai eu du mal à envoyer des e-mails en Java. J'écrirai à ce sujet plus tard.
Mémo d'utilisation de jsoup: https://qiita.com/opengl-8080/items/d4864bbc335d1e99a2d7