0

IMDB の映画ページを調べて、名前、年などの情報を抽出するクローラーを Java で作成しています。

いくつかの (imdb) ページの html ソースを調査し、クローラーがどのように機能するかを参照した後、なんとかコードを作成することができました。

私が得る情報 (例えばタイトル) は私の母国語です。母国語に情報がない場合は、元のタイトルを取得します。私が望むのは、選択した特定の言語でタイトルを取得することです。

私はこれにかなり慣れていないので、間違っている場合は修正してください。ただし、imdb はセルビア出身であることを「認識」し、結果をカスタマイズするため、母国語で結果が得られます。つまり、基本的には、英語での結果を好むことを何らかの方法で伝える必要がありますか? それは可能ですか(私はそうだと思います)、どうすればできますか?

編集: プログラムは次のようにクロールします: 文字列で url パスを取得し、それを url に変換し、bufferedreader ですべてのソースを読み取り、取得した内容を検査します。それが正しい方法であるかどうかはわかりませんが、機能しています(言語の問題を除いて)コード:

public static Info crawlUrl(String urlPath) throws IOException{
        Info info = new Info();

        //
        URL url = new URL(urlPath);
        URLConnection uc = url.openConnection();
        BufferedReader in = new BufferedReader(new InputStreamReader(
                uc.getInputStream(), "UTF-8"));
        String inputLine;
        while ((inputLine = in.readLine()) != null){
            if(inputLine.contains("<title>")) System.out.println(inputLine);
        }
        in.close();
        //
        return info;
    }

このコードはページを通過し、コンソールにメイン タイトルを出力します。

4

2 に答える 2

3

IMDB をクロールする必要はありません。IMDB が提供するダンプを使用できます: http://www.imdb.com/interfaces

彼らが提供するデータのパーサーもあります: https://code.google.com/p/imdbdumpimport/完璧ではありませんが、役立つかもしれません (機能させるためにいくらかの労力を費やすことを期待できます)。

代替パーサー: https://github.com/dedeler/imdb-data-parser

EDITとにかく、学習目的でIMDBをクロールしたいと言っています。したがって、他の回答で提案されているように、おそらくhttp://en.wikipedia.org/wiki/Content_negotiationを使用する必要があります。

uc.setRequestProperty("Accept-Language", "de; q=1.0, en; q=0.5");
于 2014-01-03T22:41:16.937 に答える
2

クローラーが使用するリクエスト ヘッダーを調べてみてください。私のものには含まれAccept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4ているので、フランス語でタイトルを取得します。

編集 :

Google Chrome の ModifyHeaders アドオンで確認したところ、値en-USが映画の英語のタイトルを取得しています =)

于 2014-01-03T22:25:38.957 に答える