我需要得到一个页面的源代码(HTML)和转换他UFT8,因为我要找到这个网页一些文字(比如,如果在page_source“my_same_text”:那么......)。 该页面包含俄文本(сyrillic符号),而这个标签
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
我用的烧瓶,并要求蟒蛇库。 我发送请求源= requests.get( 'URL /')
if 'сyrillic symbols' in source.text: ...
我不能老是找我的文字,这是由于编码如何,我可以将文本转换为UTF-8? 我尝试.encode().decode(),但它并没有帮助。
让我们创建一个页面的windows-1251
在给定的charset meta
标记和俄罗斯的一些废话文字。 我在崇高的文本保存为一个Windows 1251的文件,肯定的。
<!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
库:
如果更改编码,请求将使用每当调用r.text r.encoding的新价值。
如此这般这样的:
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
。 它可能会有所不同,并依赖于一个web服务器上的!
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
自己。
作为记载 , 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"):
# ...
第一种方案是更简单,重量更轻。