上記のコメントに加えて、は常にに従ってください。robots.txtに従ってください。それを除いて、あなたが望むコードはこのように見えるはずです。
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import net.htmlparser.jericho.Element;
import net.htmlparser.jericho.Source;
public class HtmlFun {
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.google.com");
URLConnection conn = url.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(1000);
conn.setRequestProperty("User-Agent", "Mozilla");
Source source = new Source(conn);
List elems = source.getAllElements();
for(Element elem : elems) {
System.out.println(elem);
}
}
}
ファイアウォールの問題のために仕事からは実行できませんが、これはうまくいくはずです。そうでない場合、同様のことがトリックを行います。
出典
2012-03-19 16:04:48
Jon
「わかっているように、適切なユーザーエージェントがサイトのコンテンツへのアクセスを禁止するようにしたいのですが」 - あなたのプログラムが対象のウェブサイト上の "robots.txt"の内容を無視するようにしようとしているようです。これはあなたがやろうとしているべきことではありません。ウェブページにアクセスするプログラムは、「robots.txt」の内容に従う必要があります。そうしないと、ウェブサイトがあなたのプログラムがスパムロボットであるとみなされ、あなたのプログラムがリクエストを送信しているIPアドレスからのリクエストをブロックすることになります。 – Jon
あなたのポストのためにジョン、thnx、私は完全にrobots.txtを忘れました。とにかく、私がテストしたサイトは、ページをクロールすることを許可するようになりました(私はそれがGoogleのボットのためにインデックスを作成すると仮定します)。それでも、何らかの理由で許可されていないサイトがあるかもしれませんが、とにかに「通常の」ブラウザとして偽装してアクセスしようとします。誰もがエリコでそれをする方法を知っていますか?ありがとうございました。 Btw、あなたは私が誤用のためにコンテンツを "盗む"のではなく、私はたった今それを(たったの数日のように)します。 – AndaluZ
さて、十分に公正。 Jericho APIを簡単に見てみました.Sourceというクラスのように見えますが、JDKのURLConnectionオブジェクトを渡すことができます。 URLConnectionでは、リクエストにヘッダーを設定できます。これらのヘッダーの1つは、「User-Agent」です。私はそれをやってみるだろう。メソッド "setRequestProperty"を見て、これを読んでください:http://stackoverflow.com/questions/5773800/httpurlconnection-redirection-does-not-use-request-properties-of-orginial-connec – Jon