0

我正在用 Java 编写一个爬虫,它检查 IMDB 电影页面并提取一些信息,如名称、年份等。用户编写(或复制/粘贴)标题的链接,我的程序应该完成剩下的工作。

在检查了几个(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,你可以使用他们提供的转储:http ://www.imdb.com/interfaces

他们提供的数据还有一个解析器:https ://code.google.com/p/imdbdumpimport/它并不完美,但也许会对您有所帮助(您可以期望花费一些精力使其工作)。

另一种解析器:https ://github.com/dedeler/imdb-data-parser

编辑您是说无论如何您都想抓取 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因此我得到法语标题。

编辑 :

我检查了谷歌浏览器上的 ModifyHeaders 插件,值en-US是让我得到电影的英文标题 =)

于 2014-01-03T22:25:38.957 回答