6

JSoup を使用して、Google から検索結果をスクレイピングしようとしています。現在、これは私のコードです。

public class GoogleOptimization {
public static void main (String args[])
{
    Document doc;
    try{
        doc = Jsoup.connect("https://www.google.com/search?as_q=&as_epq=%22Yorkshire+Capital%22+&as_oq=fraud+OR+allegations+OR+scam&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=").userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get();
        Elements links = doc.select("what should i put here?");
        for (Element link : links) {
                System.out.println("\n"+link.text());
    }
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

}

検索結果のタイトルとタイトルの下のスニペットを取得しようとしています。そうそう、これらをスクレイピングするためにどの要素を探すべきかわかりません。Java を使用して Google をスクレイピングするより良い方法があれば、ぜひ教えてください。

ありがとう。

4

1 に答える 1

12

どうぞ。

public class ScanWebSO 
{
public static void main (String args[])
{
    Document doc;
    try{
        doc =        Jsoup.connect("https://www.google.com/search?as_q=&as_epq=%22Yorkshire+Capital%22+&as_oq=fraud+OR+allegations+OR+scam&as_eq=&as_nlo=&as_nhi=&lr=lang_en&cr=countryCA&as_qdr=all&as_sitesearch=&as_occt=any&safe=images&tbs=&as_filetype=&as_rights=").userAgent("Mozilla").ignoreHttpErrors(true).timeout(0).get();
        Elements links = doc.select("li[class=g]");
        for (Element link : links) {
            Elements titles = link.select("h3[class=r]");
            String title = titles.text();

            Elements bodies = link.select("span[class=st]");
            String body = bodies.text();

            System.out.println("Title: "+title);
            System.out.println("Body: "+body+"\n");
        }
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
}

また、これを自分で行うには、クロムを使用することをお勧めします。スクレイピングしたいものを右クリックして、要素を検査します。その要素が配置されている html 内の正確な場所に移動します。この場合、最初に、すべての結果リストのルートがどこにあるかを確認する必要があります。それが見つかったら、要素を指定し、できればそれを検索するための一意の属性を指定します。この場合、ルート要素は

<ol eid="" id="rso">

その下には、で始まる一連のリストが表示されます。

<li class="g"> 

これは、最初の要素配列に入れたいものであり、各要素について、タイトルと本文がある場所を見つけたいと思うでしょう。この場合、タイトルは

<h3 class="r" style="white-space: normal;">

エレメント。したがって、各リストでその要素を検索します。体も同じです。本文が下にあることがわかったので、.text() メソッドを使用して検索したところ、その要素の下にあるすべてのテキストが返されました。重要なのは、常に元の属性を持つ要素を見つけようとすることです (クラス名を使用するのが理想的です)。「div」のようなものだけを検索せずに検索すると、ページ全体で div を含む要素が検索され、それが返されます。したがって、必要以上の結果が得られます。これでうまく説明できることを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-07-17T19:22:10.357 に答える