1

我想找到正确的方法来为我的爬虫设置 Accept-Language 标头吗?我阅读了其他相关答案,例如以特定语言获取 imdb 电影标题如何根据小程序的请求设置 Accept-Language 标头, 但它们对我不起作用(我收到此错误:“该方法未定义类型连接”在这里是代码的一部分:

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真的很陌生。

谢谢

4

2 回答 2

1

Accept-Language 请求标头字段类似于 Accept,但限制了作为对请求的响应首选的自然语言集。语言标签在这里

   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 -->");

希望有帮助!

资料来源:

于 2014-05-23T20:02:02.923 回答
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"来代替最后一条评论。

于 2014-05-23T20:05:24.083 回答