So verwenden Sie Scraperapi mit htmlunit in Java

Scraperapi ist ein leistungsstarkes Scraping -Tool, das automatisch Proxies, Browser und Captchas übernimmt. In dieser Anleitung lernen Sie, wie Sie Scraperapi in htmlunit integrieren, einem schnellen und leichten, kopflosen Browser für Java.

Erste Schritte

Bevor wir Scraperapi integrieren, finden Sie hier ein grundlegendes HTMLunit -Scraping -Beispiel:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class BasicHtmlUnit {
   public static void main(String() args) throws Exception {
       WebClient client = new WebClient(BrowserVersion.CHROME);
       client.getOptions().setCssEnabled(false);
       client.getOptions().setJavaScriptEnabled(false);

       HtmlPage page = client.getPage("https://httpbin.org/ip");
       System.out.println(page.asNormalizedText());
       client.close();
   }
}

Dies eignet sich für Basic Scraping, löst jedoch keine Probleme wie IP -Verbote oder Captchas.

Integrationsmethoden

Empfohlen: API -Endpunktmethode

Die beste Möglichkeit, Scraperapi mit HTMLunit zu verwenden, besteht darin, den API -Endpunkt direkt aufzurufen und die Ziel -URL als Abfrageparameter zu übergeben. Dadurch wird Ihre Anforderungswege über das Proxy-Netzwerk von Scraperapi mit integriertem Captcha-Handling gewährleistet.

Erforderliches Setup

1. Installieren Sie Java (wenn nicht bereits installiert)
# Ubuntu
sudo apt-get update
sudo apt-get install default-jdk 

# MacOS
brew install openjdk@2

Dann zu Ihrer Shell -Konfiguration (z. B. zu Ihrer Shell -Konfiguration .zshrc oder .bash_profile):

export JAVA_HOME="/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home"
export PATH="$JAVA_HOME/bin:$PATH"

echo 'export JAVA_HOME="/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home"' >> ~/.bash_profile
echo 'export PATH="$JAVA_HOME/bin:$PATH"' >> ~/.bash_profile

Laden Sie Ihre Shell neu:

source ~/.zshrc
# or
source ~/.bash_profile

Bestätigen Sie, dass Java installiert ist:

2. Installieren Sie Maven
# Ubuntu
sudo apt update
sudo apt install maven

# MacOS
brew install maven

Überprüfen:

3. Die Projektstruktur einrichten

Erstellen Sie einen Ordner und initialisieren Sie das Maven -Projekt:

mkdir htmlunit-scraperapi && cd htmlunit-scraperapi

Erstellen Sie die Struktur: Erstellen Sie die Struktur:

src/
 main/
   java/
     MarketPrice.java
4. Fügen Sie Abhängigkeiten in pom.xml hinzu

Erstellen Sie im Root Ihres Projektordners eine Datei pom.xml und fügen Sie Folgendes ein:


  
   4.0.0
   com.scraperapi
   htmlunit-scraperapi
   1.0-SNAPSHOT

   
       
       
           net.sourceforge.htmlunit
           htmlunit
           2.70.0
       

       
       
           io.github.cdimascio
           java-dotenv
           5.2.2
       
   

   
       
           
           
               org.codehaus.mojo
               exec-maven-plugin
               3.1.0
               
                   MarketPrice
               
           
       
   

5. Fügen Sie .Env -Datei im Root hinzu

Erstellen Sie im selben Ordner a .env Datei:

SCRAPERAPI_KEY=your_api_key_here

Hier können Sie Ihren Schaferapi -Schlüssel erhalten.

Voller Arbeitscode

Fügen Sie dies hinein MarketPrice.java:

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomNode;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import io.github.cdimascio.dotenv.Dotenv;

import java.io.IOException;

public class MarketPrice {
   public static void main(String() args) throws IOException {
       // Load ScraperAPI key from .env
       Dotenv dotenv = Dotenv.load();
       String apiKey = dotenv.get("SCRAPERAPI_KEY");

       if (apiKey == null || apiKey.isEmpty()) {
           System.err.println("SCRAPERAPI_KEY is missing in your .env file.");
           return;
       }

       // Target a real HTML site
       String targetUrl = "https://quotes.toscrape.com";
       String scraperApiUrl = String.format("http://api.scraperapi.com?api_key=%s&url=%s",
               apiKey, targetUrl);

       // Initialize headless browser
       WebClient webClient = new WebClient(BrowserVersion.CHROME);
       webClient.getOptions().setUseInsecureSSL(true);
       webClient.getOptions().setCssEnabled(false);
       webClient.getOptions().setJavaScriptEnabled(false);
       webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
       webClient.getOptions().setThrowExceptionOnScriptError(false);

       // Fetch and parse page
       HtmlPage page = (HtmlPage) webClient.getPage(scraperApiUrl);

       DomNodeList quoteBlocks = page.querySelectorAll(".quote");

       System.out.println("\n📌 Scraped Quotes from https://quotes.toscrape.com:\n");

       for (DomNode quote : quoteBlocks) {
           String text = quote.querySelector(".text").asNormalizedText();
           String author = quote.querySelector(".author").asNormalizedText();
           DomNodeList tags = quote.querySelectorAll(".tags .tag");

           System.out.println("📝 Quote: " + text);
           System.out.println("👤 Author: " + author);
           System.out.print("🏷️  Tags: ");
           for (DomNode tag : tags) {
               System.out.print(tag.asNormalizedText() + " ");
           }
           System.out.println("\n------------------------------------------\n");
       }

       webClient.close();
   }
}

Stellen Sie sicher, dass Sie Ihren API -Schlüssel in der Umgebungsvariablen festlegen SCRAPERAPI_KEY.

Nicht empfohlen: Proxy -Modus

HTMLUnit ermöglicht die Proxy -Konfiguration, aber Scraperapi verwendet die Anfragestöne -Authentifizierung, die nicht mit dem Proxy -Modell von HTMLUNIT funktioniert.

Warum es fehlschlägt

  • Scraperapi benötigt die API -Taste in der URL -Abfrage.
  • HTMLUNIT Proxy Setup erwartet eine statische IP oder eine grundlegende Authentifizierung.

Fehlerausgabe:

Verwenden Sie stattdessen die API -Endpunktmethode.

Optionale Parameter

Scraperapi unterstützt verschiedene Optionen über Abfrageparameter:

{
   Render = true,           // Load JavaScript
   CountryCode = "us",      // Use US IP
   Premium = true,          // Enable CAPTCHA solving
   SessionNumber = 123      // Maintain session across requests
};
Parameter Was es tut Wann man es benutzt
render=true Fordert Scraperapi an, JavaScript auszuführen Verwendung für Spas und dynamische Inhalte
country_code=us Routenanfragen über US -Proxies Ideal für geo-blockierte Inhalte
premium=true Ermöglicht CAPTCHA-Lösung und fortgeschrittene Anti-BOT-Maßnahmen Essentiell für stark geschützte Stellen
session_number=123 Behält die gleiche Proxy -IP über Anfragen hinweg bei Verwenden Sie, wenn Sie Anmeldesitzungen beibehalten müssen

Diese Parameter decken die meisten Schablonen -Szenarien ab. Weitere Optionen finden Sie in der Dokumentation der Schaferapi.

Beispiel:

String scraperApiUrl = String.format("http://api.scraperapi.com?api_key=%s&url=%s&render=true&country_code=us", apiKey, java.net.URLEncoder.encode(targetUrl, "UTF-8"));

Best Practices

  • Speichern Sie Ihren Schaferapi -Schlüssel immer in einer Umgebungsvariablen
  • Verwenden render=true Bei der Ausrichtung auf javaScript-strenge Websites
  • Vermeiden Sie die Verwendung von Proxy -Einstellungen in htmlunit
  • Implementieren Sie die Wiederholungslogik beim Abkratzen großer Datensätze
  • Deaktivieren Sie JavaScript/CSS für eine bessere Leistung auf statischen Seiten

Führen Sie den Schaber aus

Laufen Sie Ihre MarketPrice.java Datei mit:

mvn compile exec:java -Dexec.mainClass=MarketPrice

Erwartete Ausgabe:

Ihr Terminal sollte strukturierte Zitatdaten wie folgt anzeigen:

ScreenshotScreenshot

Dies bestätigt, dass Scraperapi die Anfrage bearbeitet und über sein Netzwerk geleitet wird.

Mein Name ist Kadek und ich bin ein Student aus Indonesien und studiere derzeit Informatik in Deutschland. Dieser Blog dient als Plattform, auf der ich mein Wissen zu Themen wie Web Scraping, Screen Scraping, Web Data Mining, Web Harvesting, Web Data Extraction und Web Data Parsing teilen kann.