web-dev-qa-db-ja.com

Java Webクローラーライブラリ

実験用にJavaベースのWebクローラーを作成したいと思いました。Java時間ですが、2つの重要な質問があります。

  1. プログラムはどのようにWebページに「アクセス」または「接続」しますか?簡単な説明をお願いします。 (ハードウェアからソフトウェアまでの抽象化のレイヤーの基本を理解しています。ここではJava抽象化)に興味があります)

  2. どのライブラリを使用すればよいですか? Webページに接続するためのライブラリ、HTTP/HTTPSプロトコル用のライブラリ、およびHTML解析用のライブラリが必要だと思います。

16

これは、プログラムがWebページに「アクセス」または「接続」する方法です。

    URL url;
    InputStream is = null;
    DataInputStream dis;
    String line;

    try {
        url = new URL("http://stackoverflow.com/");
        is = url.openStream();  // throws an IOException
        dis = new DataInputStream(new BufferedInputStream(is));

        while ((line = dis.readLine()) != null) {
            System.out.println(line);
        }
    } catch (MalformedURLException mue) {
         mue.printStackTrace();
    } catch (IOException ioe) {
         ioe.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException ioe) {
            // nothing to see here
        }
    }

これは、htmlページのソースをダウンロードします。

HTML解析については this を参照してください

jSpiderjsoup もご覧ください。

8
Mohammad Adil

Crawler4jが最適なソリューションです。

Crawler4j はオープンソースですJava Webをクロールするためのシンプルなインターフェースを提供するクローラー。マルチスレッドのWebクローラーを5分でセットアップできます!

また visit。 for more Java=ベースのWebクローラーツールとそれぞれの簡単な説明。

11
cuneytykaya

現在、HTMLページへのアクセスと解析をサポートする多くのJavaベースのHTMLパーサーが含まれています。

こちら HTMLパーサーの完全なリストと基本的な比較。

4
Vishnu

コンテンツの解析には Apache Tika を使用しています。

4
Waji

私はcrawler4jを好みます。 Crawler4jは、オープンソースのJavaクローラーで、Webをクロールするためのシンプルなインターフェースを提供します。数時間でマルチスレッドWebクローラーをセットアップできます。

2
Vivek Vermani

HttpClientライブラリ を使用することをお勧めします。あなたは例を見つけることができます ここ

2
Benoit

私は誰も言及しないことを提案する別の解決策を考え出します。 Selenum というライブラリがあります。これは、テスト目的でWebアプリケーションを自動化するために使用されるオープンソースの自動化テストツールですが、これだけに限定されません。人間が行うのと同じように、Webクローラーを作成して、この自動化テストツールを利用できます。

実例として、私はそれがどのように機能するかをよりよく理解するための簡単なチュートリアルを提供します。この投稿を読んで退屈している場合は、こちらをご覧ください Video このライブラリがWebページをクロールするために提供できる機能を理解してください。

セレンコンポーネント

はじめにSeleniumは、独自のプロセスで共存し、Javaプログラムでアクションを実行するさまざまなコンポーネントで構成されています。このメインコンポーネントはWebdriverと呼ばれ、作成するためにプログラムに含める必要があります。正常に動作しています。

次の site にアクセスして、お使いのコンピューターのOS(Windows、Linux、またはMacOS)の最新リリースをダウンロードしてください。これは、chromedriver.exeを含むZipアーカイブです。コンピューターに保存し、C:\ WebDrivers\User\chromedriver.exeのように便利な場所に展開します。この場所は後で使用しますJavaプログラム。

次のステップは、jarライブラリーをインクルードすることです。 Mavenプロジェクトを使用してJava programmをビルドしていると仮定すると、pom.xmlにfollow依存関係を追加する必要があります

<dependency>
 <groupId>org.seleniumhq.Selenium</groupId>
 <artifactId>Selenium-Java</artifactId>
 <version>3.8.1</version>
</dependency>

Selenium Webドライバーのセットアップ

Seleniumから始めましょう。最初のステップは、ChromeDriverインスタンスを作成することです。

System.setProperty("webdriver.chrome.driver", "C:\WebDrivers\User\chromedriver.exe);
WebDriver driver = new ChromeDriver();

次の例は、Webページを開き、いくつかの有用なHtmlコンポーネントを抽出する単純なプログラムを示しています。手順をわかりやすく説明するコメントが付いているのでわかりやすい。オブジェクトをキャプチャする方法を理解するために簡単に見てください

//Launch website
      driver.navigate().to("http://www.calculator.net/");

      //Maximize the browser
      driver.manage().window().maximize();

      // Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();

      // Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();

      // Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");

      // Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");

      // Click Calculate Button
      driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr[2]/td/input[2]")).click();


      // Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/font/b")).getText();


      // Print a Log In message to the screen
      System.out.println(" The Result is " + result);

作業が終了したら、ブラウザウィンドウを次のようにして閉じることができます。

driver.quit();

Seleniumブラウザオプション

このライブラリを使用するときに実装できる機能が多すぎます。たとえば、chromeを使用しているとすると、コードに追加できます

ChromeOptions options = new ChromeOptions();

WebDriverを使用してChrome ChromeOptionsを使用した拡張機能を開く方法をご覧ください。

options.addExtensions(new File("src\test\resources\extensions\extension.crx"));

これはシークレットモードを使用するためのものです

options.addArguments("--incognito");

これはJavaScriptと情報バーを無効にするためのものです

options.addArguments("--disable-infobars");
options.addArguments("--disable-javascript");

これは、ブラウザーをサイレントにスクレイピングさせ、バックグラウンドでクロールするブラウザーを非表示にする場合に使用します。

options.addArguments("--headless");

あなたがそれを終えたら

WebDriver driver = new ChromeDriver(options);

要約すると、Seleniumが何を提供しなければならないかを見て、これまでにこの投稿で提案した他のソリューションと比較して、Seleniumをユニークな選択にします。

  • 言語とフレームワークのサポート
  • オープンソースの可用性
  • マルチブラウザのサポート
  • さまざまなオペレーティングシステムでのサポート
  • 実装のしやすさ
  • 再利用性と統合
  • 並列テストの実行と市場投入の高速化
  • 学びやすく使いやすい
  • 一定の更新
2

jsoup は他より優れていると思います。jsoupはJava 1.5以上、Scala、Android、OSGi、Google App Engineで動作します。

1
Saeed Zarinfam

どのようにして実行できるかを知りたい場合は、これらの既存のプロジェクトをご覧ください。

典型的なクローラープロセスは、フェッチ、解析、リンク抽出、および出力の処理(格納、インデックス付け)で構成されるループです。悪魔は詳細にありますが、どのように「礼儀正しく」尊重するかはrobots.txt、メタタグ、リダイレクト、レート制限、URLの正規化、無限の深さ、再試行、再訪問など。

Norconex HTTP Collector flow diagram

Norconex HTTP Collectorの厚意によるフロー図

1
rustyx

利用可能なクローラーのリストは次のとおりです。

https://Java-source.net/open-source/crawlers

しかし、私は Apache Nutch を使用することをお勧めします

0
sendon1982

HttpUnitは主に単体テストWebアプリケーションで使用されますが、Webサイトを横断し、リンクをクリックして、テーブルとフォーム要素を分析し、すべてのページに関するメタデータを提供します。単体テストだけでなく、Webクロールにも使用します。 - http://httpunit.sourceforge.net/

0
fandang

あなたは探検することができます。ApachedroidまたはApache nutchは、Javaベースのクローラーの感触を得るために

0
Sagar