在java中为crawler设置Accept-Language标头

时间:2014-05-23 18:51:51

标签: java web-crawler imdb http-accept-language

我想找到为我的抓取工具设置Accept-Language标头的正确方法吗?我读了其他相关答案,例如Getting imdb movie titles in a specific languageHow to set Accept-Language header on request from applet 但它们对我不起作用(我得到这个错误:“类型连接的方法未定义” 以下是代码的一部分:

String baseUrl = "http://www.imdb.com/search/title?at=0&count=250";

org.jsoup.Connection con = Jsoup.connect(baseUrl).userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21");

请帮帮我,我是java的新手。

由于

2 个答案:

答案 0 :(得分:1)

Accept-Language请求标头字段与Accept类似,但限制首选的自然语言集作为对请求的响应。 Language Tags here

   Accept-Language = "Accept-Language" ":"
                     1#( language-range [ ";" "q" "=" qvalue ] )
   language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )

每个语言范围可以被赋予相关的质量值,该值表示用户对该范围指定的语言的偏好的估计。质量值默认为“q = 1”。例如,

   Accept-Language: da, en-gb;q=0.8, en;q=0.7

意思是:“我更喜欢丹麦语,但会接受英国英语和其他类型的英语。”语言范围匹配语言标记(如果它与标记完全相等),或者它是否恰好等于标记的前缀,使得前缀后面的第一个标记字符为“ - ”。特殊范围“*”(如果出现在Accept-Language字段中)匹配与Accept-Language字段中出现的任何其他范围不匹配的每个标记。

  Note: This use of a prefix matching rule does not imply that
  language tags are assigned to languages in such a way that it is
  always true that if a user understands a language with a certain
  tag, then this user will also understand all languages with tags
  for which this tag is a prefix. The prefix rule simply allows the
  use of prefix tags if this is the case.

Accept-Language字段分配给语言标记的语言质量因子是字段中与语言标记匹配的最长语言范围的质量值。如果字段中的语言范围与标记不匹配,则分配的语言质量因子为0.如果请求中没有Accept-Language标头,则服务器

应该假设所有语言都同样可以接受。如果存在Accept-Language标头,则可以接受分配了大于0的品质因数的所有语言。

在每个请求中发送带有用户完整语言偏好的Accept-Language标头可能违反用户的隐私期望。

由于可懂度高度依赖于个人用户,因此建议客户端应用程序选择可供用户使用的语言首选项。如果选项不可用,则不得在请求中给出Accept-Language头字段。

  

注意:在选择语言偏好时可以使用         用户,我们提醒用户不是实施者         熟悉上述语言匹配的细节,         并应提供适当的指导。例如,用户         可能会假设在选择“en-gb”时,它们将被提供         如果没有英国英语,请提供英文文件。一个         用户代理可能会建议在这种情况下添加“en”来获取         最佳匹配行为。

示例:

connection.setRequestProperty("Accept-Language","<!-- Depends on Language you want -->");

希望有所帮助!

来源:

答案 1 :(得分:1)

在JSoup中,您使用header方法设置请求标头。所以你的代码的最后一行将成为这个。我刚刚添加了换行符以便于阅读。

org.jsoup.Connection con = Jsoup
     .connect(baseUrl)
     .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
     .header("Accept-Language", /* Put your language here */);

例如,要接受英语,您可以用"en"代替最后一条评论。