发送请求页面与蟒蛇窗口-1251编码(Send request to page with windo

2019-10-21 19:21发布

我需要得到一个页面的源代码(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(),但它并没有帮助。

Answer 1:

让我们创建一个页面的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自己。



Answer 2:

作为记载 , 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"):
    # ...

第一种方案是更简单,重量更轻。



文章来源: Send request to page with windows-1251 encoding from python