【问题标题】:How does a website know your metric system, date format ...?网站如何知道您的公制、日期格式……?
【发布时间】:2015-06-18 02:23:31
【问题描述】:

我使用 Beautiful Soup 在 2 个不同的服务器(美国/欧洲)上运行相同的 python 脚本并请求获取 HTML 字符串。 但我收到相同 URL 的不同字符串:

http://magicseaweed.com/Playa-Jaco-Surf-Report/2472/

一个以米为单位,日期为欧洲格式(欧洲服务器),另一个以英尺和美国日期格式(美国服务器)。

我已尝试更改请求的 HTTP 标头:

headers = {'Accept': '*/*',
           'Accept-Encoding': 'gzip, deflate',
           'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2,ru;q=0.2,ja;q=0.2',
           'User-Agent': 'python-requests/2.6.0 CPython/2.7.6 Darwin/14.1.0'}

r = requests.get(url,headers = headers)

但这并没有改变任何东西,美国服务器仍然接收英尺单位/美国格式日期...... 如何像在欧洲服务器上一样在美国服务器上接收米单位和欧洲日期格式?

【问题讨论】:

  • 我在欧盟,看到脚了;你确定这不仅仅是存储在 cookie 中的网站偏好吗?
  • 没关系,您的回答被接受了,谢谢。

标签: python http-headers beautifulsoup server python-requests


【解决方案1】:

无法确定首选的公制;浏览器没有存储这样的偏好,您的操作系统也不会跟踪它。

相反,该网站只是存储了一个偏好,可在 UI 中设置:

此设置似乎存储在MSW_unitgroup cookie 中:

值在ukuseu 之间切换。

登录用户可以将偏好设置为他们帐户的一部分:

由于您的 Python 代码尚未登录帐户,因此将显示默认值;充其量可以根据您的 IP 地址选择默认值。

您可以简单地自己设置该 cookie:

cookies = {'MSW_unitgroup': 'eu'}  # european units

headers = {'Accept': '*/*',
           'Accept-Encoding': 'gzip, deflate',
           'Accept-Language': 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4,de;q=0.2,ru;q=0.2,ja;q=0.2',
           'User-Agent': 'python-requests/2.6.0 CPython/2.7.6 Darwin/14.1.0'}

r = requests.get(url, headers=headers, cookies=cookies)

【讨论】:

    【解决方案2】:

    magseaweed.com 网站将您选择的单位存储在 MSW_unitgroup cookie 中。如果您想要公制单位,您需要发送值为“eu”的 MSW_unitgroup cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2018-12-05
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多