0

私はかなり紛らわしい問題を抱えています。私は文字通り、ネットワーキングを 1 日しか行っていません。私の問題は、クロムにコピーアンドペーストしてアクセスできるプログラム的な方法で URL にアクセスできないことです。

私は jsoup ( http://jsoup.org/apidocs/ ) と呼ばれるライブラリを使用しています。これは、Web サイトの生の html からテキストを解析します。私の一般的な目標は、文字列を添付できるベース URL を使用して、そこから Web ページを取得することです。私はコードを使用しています(より多くのコードを要求した人のために編集してください。これはまだまばらであることは知っていますが、これはエラーの前の唯一のコードです)

String url = "https://www.google.com/search?q=definition+of+";
url += search; //search is the passed in string
Document doc = Jsoup.connect(url).get(); //url is the String in question

ウェブページを取得します。私の最終的な目標は、このメソッドを使用して、単語の定義を検索するときにクロム検索の上部にあるボックスのテキストを取得することです。つまり、ここの上部にあるボックス: https://www.google.com/search?q=definition+of+apple

ただし、上記のリンクを URL として使用しようとすると問題が発生します。org.jsoup.HttpStatusException が発生するため、ネットワークの問題だと思います。クロムに入力するとこの URL が機能するのに、Java では機能しない原因は何ですか? (現在の方法は少し回りくどい感じがするので、そのボックス内の情報を取得するさまざまな方法に反対することもありません)

完全なエラー メッセージ (編集済み)

Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=403, URL=https://www.google.com/search?q=definition+of+apple
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:435)
at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410)
at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164)
at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153)
at test.Test.parseDef(Test.java:68)
at test.Test.main(Test.java:112)

誰が答えても、ネットワーキングの初心者を助けるために時間を費やしてくれてありがとう!

4

3 に答える 3

2

ほとんどの場合、Google はあなたのプログラムを「ロボット」として正確に識別し、それに応じて動作しています。Google は、ロボットがGoogle Custom Search APIを使用することを推奨し、人間指向の検索インターフェースを使用することを思いとどまらせています。

実際、すべての Web スパイダーは robots.txt をチェックするはずですよね? Google は次のとおりです: http://www.google.com/robots.txt。/search は許可されていないことに注意してください。

詳細については、この質問を参照してください。それは基本的にあなたの質問のpythonバージョンです。 Google 検索が HTTP エラー 403 を返すのはなぜですか?

于 2013-08-21T14:46:59.213 に答える
0

Jsoup を使用する場合は、スペースを + ではなく %20 に置き換える必要があります。

この URL を試してください: https://www.google.com/search?q=definition%20of%20apple

String url = "https://www.google.com/search?q=definition%20of%20";
url += search; //search is the passed in string
Document doc = Jsoup.connect(url).get();
于 2013-08-21T14:32:42.473 に答える
0
public static void main(String[] args) {
    Document doc = Jsoup.connect(link)
        .data("query", "Java")
        .userAgent("Mozilla")
        .cookie("auth", "token")
        .timeout(1000)
        .post();
}
于 2015-10-06T08:48:20.137 に答える