【发布时间】: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