
Web Scraping jest również nazywany zbieraniem danych, zbieraniem sieci lub indeksowaniem sieci, które służy do wydobywania danych ze stron internetowych. Skrobak sieciowy może wykorzystywać różne podejścia do wydobywania informacji. Na przykład XPath, selektory CSS, niestandardowe filtry, nawigacja HTML itp. Zgodnie z takimi scenariuszami, w tym artykule opisano, jak programowo utworzyć narzędzie do skrobania stron internetowych w Javie.
- Konfiguracja biblioteki Web Scraping Java
- Skrobanie stron internetowych z nawigacją HTML w Javie
- Web Scraping przy użyciu XPath Query w Javie
- Skrobanie stron internetowych za pomocą selektora CSS w Javie
Konfiguracja biblioteki Web Scraping Java
Aspose.HTML for Java API obsługuje funkcje web scrapingu przy użyciu różnych technik. Możesz po prostu uzyskać dostęp do API, pobierając pliki JAR ze strony Downloads lub użyj następujących konfiguracji Mavena w pliku pom.xml swojego projektu:
Magazyn:
<repositories>
<repository>
<id>snapshots</id>
<name>repo</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
</repositories>
Zależność:
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-html</artifactId>
<version>21.12</version>
<classifier>jdk17</classifier>
</dependency>
</dependencies>
Skrobanie stron internetowych z nawigacją HTML w Javie
Możesz pracować z klasą Node, aby nawigować po stronach HTML. Poniższy fragment kodu pokazuje, jak poruszać się po dokumencie HTML w Javie:
// Przygotuj kod HTML
String html_code = "<span>Hello</span> <span>World!</span>";
// Zainicjuj dokument z przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
// Uzyskaj odniesienie do pierwszego elementu potomnego (pierwszy SPAN) CIAŁA
com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
System.out.println(element.getTextContent()); // output: Hello
// Pobierz odwołanie do drugiego elementu SPAN
element = element.getNextElementSibling();
System.out.println(element.getTextContent()); // output: World!
} finally {
if (document != null) {
document.dispose();
}
}
Inspekcja dokumentu HTML i jego elementów w Javie
Możesz pracować z metodą przechodzenia elementów, aby poruszać się po stronach HTML. Poniższy przykładowy kod wyjaśnia, jak sprawdzać dokumenty HTML w Javie.
// Załaduj dokument z pliku
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
// Pobierz element HTML dokumentu
var element = document.getDocumentElement();
System.out.println(element.getTagName()); // HTML
// Pobierz ostatni element elementu HTML
element = element.getLastElementChild();
System.out.println(element.getTagName()); // BODY
// Pobierz pierwszy element elementu body
element = element.getFirstElementChild();
System.out.println(element.getTagName()); // H1
System.out.println(element.getTextContent()); // Header 1
}
Niestandardowe użycie filtra dla narzędzia Web Scraper w Javie
Możesz ustawić niestandardowy filtr, aby pomijał lub akceptował określone filtry do pracy ze skrobakiem internetowym w Javie. Poniższy przykładowy kod wyjaśnia, jak pracować z filtrami niestandardowymi lub zdefiniowanymi przez użytkownika w skrobaku internetowym przy użyciu języka Java:
public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {
@Override
public short acceptNode(com.aspose.html.dom.Node n) {
// Bieżący filtr pomija wszystkie elementy oprócz elementów IMG.
return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
}
}
Następnie, po skonfigurowaniu niestandardowego filtra, możesz łatwo poruszać się po stronie HTML, korzystając z poniższego fragmentu kodu:
// Przygotuj kod HTML
String code = " < p > Hello </p >\n" +
" <img src = 'image1.png' >\n" +
" <img src = 'image2.png' >\n" +
" <p > World ! </p >\n";
// Zainicjuj dokument na podstawie przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Aby rozpocząć nawigację HTML, musimy utworzyć instancję TreeWalker.
// Podane parametry oznaczają, że zaczyna chodzić od korzenia dokumentu, iterując wszystkie węzły i korzysta z naszej niestandardowej implementacji filtra
com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
// Posługiwać się
while (iterator.nextNode() != null) {
// Ponieważ używamy własnego filtra, bieżący węzeł zawsze będzie instancją elementu HTMLImageElement.
// Nie potrzebujemy tutaj dodatkowych walidacji.
com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();
System.out.println(image.getSrc());
// wyjście: obraz1.png
// wyjście: image2.png
}
} finally {
if (document != null) {
document.dispose();
}
}
Web Scraping przy użyciu XPath Query w Javie
Możesz wybrać różne węzły dokumentu HTML według różnych kryteriów, używając XPath. Poniższy kod demonstruje, jak wykonać skrobanie sieci za pomocą XPath Query w Javie:
// Przygotuj kod HTML
String code = "< div class='happy' >\n" +
" <div >\n" +
" <span > Hello ! </span >\n" +
" </div >\n" +
" </div >\n" +
" <p class='happy' >\n" +
" <span > World </span >\n" +
" </p >\n";
// Zainicjuj dokument na podstawie przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Tutaj oceniamy wyrażenie XPath, w którym wybieramy wszystkie podrzędne elementy SPAN spośród elementów, których atrybut „class” jest równy „happy”:
com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
document,
null,
com.aspose.html.dom.xpath.XPathResultType.Any,
null
);
// Iteruj po wynikowych węzłach
for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
System.out.println(node.getTextContent());
// wyjście: Witam
// wyjście: Świat!
}
} finally {
if (document != null) {
document.dispose();
}
}
Skrobanie stron internetowych za pomocą selektora CSS w Javie
Możesz wyszukać potrzebne elementy w web scraperze za pomocą selektora CSS. Możesz określić parametr jako selektor zapytania, a następnie lista pasujących do selektora zostanie zwrócona do narzędzia Web Scraper. Poniższy przykładowy kod pokazuje, jak używać selektora CSS w skrobaku internetowym przy użyciu Javy:
// Przygotuj kod HTML
String code = "< div class='happy' >\n" +
" <div >\n" +
" <span > Hello </span >\n" +
" </div >\n" +
" </div >\n" +
" <p class='happy' >\n" +
" <span > World ! </span >\n" +
" </p >\n";
// Zainicjuj dokument na podstawie przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Tutaj tworzymy selektor CSS, który wyodrębnia wszystkie elementy, których atrybut „class” jest równy „happy” i ich elementy potomne SPAN
com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");
// Iteruj po wynikowej liście elementów
elements.forEach(element -> {
System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
// wyjście: Witam
// wyjście: Świat!
});
} finally {
if (document != null) {
document.dispose();
}
}
Wniosek
W tym artykule zbadałeś różne metody, których można użyć do stworzenia skrobaka sieciowego w Javie. Wystarczy wykonać kilka wywołań API przy użyciu biblioteki Aspose.HTML for Java, aby stworzyć web scraper w Javie. W tym artykule możesz zapoznać się z technikami nawigacji HTML, selektora CSS, filtra niestandardowego i zapytań XPath. Ponadto, jeśli potrzebujesz dodatkowych informacji lub pomocy, skontaktuj się z nami za pośrednictwem forum.