Webbskrapning kallas också dataskrapning, webbskörd eller webbcrawlning som används för att extrahera data från webbsidorna. En webbskrapa kan använda olika tillvägagångssätt för att extrahera information. Till exempel XPath, CSS-väljare, anpassade filter, HTML-navigering, etc. I enlighet med sådana scenarier täcker den här artikeln hur man skapar en webbskrapa programmatiskt i Java.
- Java Web Scraping Library Configuration
- Webbskrapa med HTML-navigering i Java
- Webbskrapa med XPath Query i Java
- Webbskrapa med CSS-väljare i Java
Java Web Scraping Library Configuration
Aspose.HTML for Java API-stöd erbjuder webbskrapningsfunktioner med olika tekniker. Du kan enkelt komma åt API:et genom att ladda ner JAR-filerna från sidan Nedladdningar eller använda följande Maven-konfigurationer i pom.xml-filen för ditt projekt:
Förvar:
<repositories>
<repository>
<id>snapshots</id>
<name>repo</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
</repositories>
Beroende:
<dependencies>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-html</artifactId>
<version>21.12</version>
<classifier>jdk17</classifier>
</dependency>
</dependencies>
Webbskrapa med HTML-navigering i Java
Du kan arbeta med klassen Node för att navigera i HTML-sidor. Kodavsnittet nedan visar hur man navigerar i ett HTML-dokument i Java:
// Förbered en HTML-kod
String html_code = "<span>Hello</span> <span>World!</span>";
// Initiera ett dokument från den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
// Hämta referensen till det första barnet (första SPANEN) i BODY
com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
System.out.println(element.getTextContent()); // output: Hello
// Hämta referensen till det andra SPAN-elementet
element = element.getNextElementSibling();
System.out.println(element.getTextContent()); // output: World!
} finally {
if (document != null) {
document.dispose();
}
}
Inspektion av HTML-dokumentet och dess element i Java
Du kan arbeta med elementtraversalmetoden för att navigera på HTML-sidorna. Kodexemplet nedan beskriver hur man inspekterar HTML-dokument i Java.
// Ladda ett dokument från en fil
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
// Hämta html-elementet i dokumentet
var element = document.getDocumentElement();
System.out.println(element.getTagName()); // HTML
// Hämta det sista elementet i html-elementet
element = element.getLastElementChild();
System.out.println(element.getTagName()); // BODY
// Få det första elementet av kroppselementet
element = element.getFirstElementChild();
System.out.println(element.getTagName()); // H1
System.out.println(element.getTextContent()); // Header 1
}
Anpassad filteranvändning för Web Scraper i Java
Du kan ställa in ett anpassat filter för att hoppa över eller acceptera specifika filter för att fungera med webbskrapan i Java. Kodexemplet nedan utvecklar hur man arbetar med de anpassade eller användardefinierade filtren i en webbskrapa med Java:
public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {
@Override
public short acceptNode(com.aspose.html.dom.Node n) {
// Det aktuella filtret hoppar över alla element, utom IMG-element.
return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
}
}
Därefter, efter att ha ställt in ett anpassat filter, kan du enkelt navigera på en HTML-sida med hjälp av kodavsnittet nedan:
// Förbered en HTML-kod
String code = " < p > Hello </p >\n" +
" <img src = 'image1.png' >\n" +
" <img src = 'image2.png' >\n" +
" <p > World ! </p >\n";
// Initiera ett dokument baserat på den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// För att starta HTML-navigering måste vi skapa en instans av TreeWalker.
// De angivna parametrarna innebär att den börjar gå från roten av dokumentet, itererar alla noder och använder vår anpassade implementering av filtret
com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
// Använda sig av
while (iterator.nextNode() != null) {
// Eftersom vi använder vårt eget filter kommer den aktuella noden alltid att vara en instans av HTMLImageElement.
// Så vi behöver inte de ytterligare valideringarna här.
com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();
System.out.println(image.getSrc());
// output: image1.png
// output: image2.png
}
} finally {
if (document != null) {
document.dispose();
}
}
Webbskrapa med XPath Query i Java
Du kan välja olika noder i ett HTML-dokument efter olika kriterier med XPath. Koden nedan visar hur man utför webbskrapning med XPath Query i Java:
// Förbered en HTML-kod
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";
// Initiera ett dokument baserat på den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Här utvärderar vi XPath-uttrycket där vi väljer alla underordnade SPAN-element från element vars 'class'-attribut är lika med 'happy':
com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
document,
null,
com.aspose.html.dom.xpath.XPathResultType.Any,
null
);
// Iterera över de resulterande noderna
for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
System.out.println(node.getTextContent());
// utgång: Hej
// output: Världen!
}
} finally {
if (document != null) {
document.dispose();
}
}
Webbskrapa med CSS-väljare i Java
Du kan söka efter de nödvändiga föremålen i en webbskrapa med hjälp av CSS-väljaren. Du kan ange en parameter som en frågeväljare och sedan returneras en lista över matchande väljare till webbskrapan. Följande kodexempel visar hur man använder CSS-väljaren i en webbskrapa med Java:
// Förbered en HTML-kod
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";
// Initiera ett dokument baserat på den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
// Här skapar vi en CSS-väljare som extraherar alla element vars "class"-attribut är lika med "happy" och deras underordnade SPAN-element
com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");
// Iterera över den resulterande listan med element
elements.forEach(element -> {
System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
// utgång: Hej
// output: Världen!
});
} finally {
if (document != null) {
document.dispose();
}
}
Slutsats
I den här artikeln har du utforskat olika metoder som kan användas för att skapa en webbskrapa i Java. Du behöver bara göra några API-anrop med hjälp av biblioteket Aspose.HTML for Java för att skapa en webbskrapa i Java. Du kan utforska HTML-navigering, CSS-väljare, anpassat filter och XPath-frågeteknik i den här artikeln. Dessutom är du välkommen att kontakta oss via forumet om du behöver ytterligare information eller hjälp.