【问题标题】:set the Accept-Language header for crawler in java在 java 中为爬虫设置 Accept-Language 标头
【发布时间】:2014-07-13 05:50:19
【问题描述】:

我想找到正确的方法来为我的爬虫设置 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新手。

谢谢

【问题讨论】:

  • 仍在研究 imDB,嗯? :)
  • :))))) 不,我在 3 个月前完成了那个项目,我今天偶然注意到它:)

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


【解决方案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" 来代替最后一条评论。

【讨论】:

    【解决方案2】:

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

    希望有帮助!

    来源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      相关资源
      最近更新 更多