【问题标题】:bizzare encoding issue makes one specific website gibberish only when viewing source奇怪的编码问题使一个特定的网站只有在查看源代码时才会出现乱码
【发布时间】:2018-03-27 21:11:01
【问题描述】:

我正在编写一个 python 脚本来从一些新闻网站获取文章,但我遇到了一个真正奇怪的编码问题。它是给一个以色列朋友的,所以网站都是希伯来语,我的方法(使用 requests 和 beautifulsoup)效果很好,直到我进入这个无论我做什么都会保持胡言乱语的网站。 该网站是makorishon。奇怪的是: 当我在浏览器中获取它时它不是乱码,当我在 firefox 上使用“检查元素”时,html 不是乱码,当我从浏览器查看源代码时它不是乱码(它也不好,它显示整个页面一分为二两个js块之间的行),但这是当我使用python时,即使将html保存到我的计算机然后在我的浏览器中打开保存的文件。 我已经以任何方式尝试了与希伯来语相关的所有可能的编码,每种编码都给我留下了一组不同的难以理解的符号。 这是正常的样子: 这是 python 页面保存的样子: 这是我知道的唯一一个这样做的网站,我在其他希伯来语网站上使用了相同的工具,结果很好。

我用来产生这个的代码是:

>>> import requests
>>> res = requests.get('https://www.makorrishon.co.il/')
>>> res
<Response [200]>
>>> file = open('makor1.html', 'w')
>>> file.write(res.text)
152957
>>> file.close()

这是一台 linux 笔记本电脑,顺便说一句。

【问题讨论】:

  • 在将 HTML 保存到文件时,您没有使用 beautifulsoup,对吗?您所看到的术语是Mojibake。这可能是页面声明其编码的方式不一致。
  • 显示用于产生问题的代码。
  • 我没有使用beautifulsoup 来制作这个,虽然代码相当简单,但我会展示代码。
  • @MarkRansom 当我通过 python 而不是在浏览器中传递代码时,这是怎么发生的?
  • print (res.encoding) 告诉我请求认为这是 ISO-8859-1。这是出乎意料的——它是 UTF-8。找不到内容类型元信息,或者可能没有正确解析。

标签: python unicode encoding python-requests hebrew


【解决方案1】:

尝试在写入文件之前添加res.encoding = 'utf-8'

if __name__ == '__main__':
    import requests
    res = requests.get('https://www.makorrishon.co.il/')
    res.encoding = 'utf-8'
    file = open('makor1.html', 'wb')
    file.write(res.text.encode('utf-8'))
    file.close()

【讨论】:

  • TypeError: write() 参数必须是 str,而不是字节
  • 您使用的是哪个 Python 版本?如果是 3.x,你需要打开带有 'wb' 标志的文件,我已经更新了代码
  • 不知道怎么做,它的作品!现在的问题是它会传递给 Beautifulsoup,但我想我会从这里弄清楚。
猜你喜欢
  • 1970-01-01
  • 2022-06-12
  • 2019-04-25
  • 2011-08-03
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多