使用来自 python 的 windows-1251 编码向页面发送请求
Send request to page with windows-1251 encoding from python
我需要获取页面源代码 (html) 并将其转换为 uft8,因为我想在此页面中找到一些文本(例如,如果 'my_same_text' in page_source:则...)。此页面包含俄文文本(сyrillic 符号)和此标签
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
我使用烧瓶,并请求 python 库。
我发送请求
来源 = requests.get('url/')
if 'сyrillic symbols' in source.text: ...
我找不到我的文字,这是由于编码问题
我如何将文本转换为 utf8?我尝试 .encode() .decode() 但它没有帮助。
As documented、requests
自动将 response.text
解码为 unicode,因此您必须查找 unicode 字符串:
if u'cyrillic symbols' in source.text:
# ...
或将 response.text
编码为适当的编码:
# -*- coding: utf-8 -*-
# (....)
if 'cyrillic symbols' in source.text.encode("utf-8"):
# ...
第一个解决方案更简单、更轻便。
让我们创建一个页面,其中包含 meta
标记中给出的 windows-1251
字符集和一些俄语废话文本。当然,我将它作为 windows-1251 文件保存在 Sublime Text 中。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<p>Привет, мир!</p>
</body>
</html>
您可以在 requests
库中使用 a little trick:
If you change the encoding, Requests will use the new value of r.encoding whenever you call r.text.
事情是这样的:
In [1]: import requests
In [2]: result = requests.get('http://127.0.0.1:1234/1251.html')
In [3]: result.encoding = 'windows-1251'
In [4]: u'Привет' in result.text
Out[4]: True
瞧!
如果它不适合你,还有一个稍微丑陋的方法。
您应该看看网络服务器发送给您的编码是什么。
可能响应的编码实际上是cp1252
(也称为ISO-8859-1
)或其他任何东西,但既不是utf8
也不是cp1251
。它可能会有所不同并取决于网络服务器!
In [1]: import requests
In [2]: result = requests.get('http://127.0.0.1:1234/1251.html')
In [3]: result.encoding
Out[3]: 'ISO-8859-1'
所以我们应该相应地重新编码。
In [4]: u'Привет'.encode('cp1251').decode('cp1252') in result.text
Out[4]: True
但这对我来说很难看(另外,我不擅长编码,而且它根本不是最好的解决方案)。我会使用 requests
本身重新设置编码。
我需要获取页面源代码 (html) 并将其转换为 uft8,因为我想在此页面中找到一些文本(例如,如果 'my_same_text' in page_source:则...)。此页面包含俄文文本(сyrillic 符号)和此标签
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
我使用烧瓶,并请求 python 库。 我发送请求 来源 = requests.get('url/')
if 'сyrillic symbols' in source.text: ...
我找不到我的文字,这是由于编码问题 我如何将文本转换为 utf8?我尝试 .encode() .decode() 但它没有帮助。
As documented、requests
自动将 response.text
解码为 unicode,因此您必须查找 unicode 字符串:
if u'cyrillic symbols' in source.text:
# ...
或将 response.text
编码为适当的编码:
# -*- coding: utf-8 -*-
# (....)
if 'cyrillic symbols' in source.text.encode("utf-8"):
# ...
第一个解决方案更简单、更轻便。
让我们创建一个页面,其中包含 meta
标记中给出的 windows-1251
字符集和一些俄语废话文本。当然,我将它作为 windows-1251 文件保存在 Sublime Text 中。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<p>Привет, мир!</p>
</body>
</html>
您可以在 requests
库中使用 a little trick:
If you change the encoding, Requests will use the new value of r.encoding whenever you call r.text.
事情是这样的:
In [1]: import requests
In [2]: result = requests.get('http://127.0.0.1:1234/1251.html')
In [3]: result.encoding = 'windows-1251'
In [4]: u'Привет' in result.text
Out[4]: True
瞧!
如果它不适合你,还有一个稍微丑陋的方法。
您应该看看网络服务器发送给您的编码是什么。
可能响应的编码实际上是cp1252
(也称为ISO-8859-1
)或其他任何东西,但既不是utf8
也不是cp1251
。它可能会有所不同并取决于网络服务器!
In [1]: import requests
In [2]: result = requests.get('http://127.0.0.1:1234/1251.html')
In [3]: result.encoding
Out[3]: 'ISO-8859-1'
所以我们应该相应地重新编码。
In [4]: u'Привет'.encode('cp1251').decode('cp1252') in result.text
Out[4]: True
但这对我来说很难看(另外,我不擅长编码,而且它根本不是最好的解决方案)。我会使用 requests
本身重新设置编码。