【问题标题】:Python - Cant make it to encode string properlyPython - 无法正确编码字符串
【发布时间】:2015-07-18 00:05:51
【问题描述】:

我正在尝试获取一些数据,这是我的代码:

import requests
from bs4 import BeautifulSoup

url = 'http://www.privredni-imenik.com/firma/68225-a_expo'
r = requests.get(url)

soup = BeautifulSoup(r.content, "html.parser")

g_data = soup.find_all("div", {"class":"podaci"})
for i in g_data:
    some = i.text.encode('utf-8', 'ignore')
    print (some)

它可以工作,但是结果如下所示:

b'A & L EXPO PREDUZE\xc4\x86E ZA PROIZVODNJU

其中\xc4\x86应该用字母Ć表示。

我怎样才能让它工作?

【问题讨论】:

  • 为什么不直接打印文本?

标签: python python-3.x encoding character-encoding beautifulsoup


【解决方案1】:

你已经有了一个字符串,直接打印文本:

In [18]: g_data = soup.find_all("div", {"class":"podaci"})

In [19]: for i in g_data:
   ....:         some = i.text
   ....:         print (some)
   ....:     
A & L EXPO PREDUZEĆE ZA PROIZVODNJU, TRGOVINU I USLUGE DOO 11070 BEOGRAD VLADIMIRA POPOVTelefaksMatični broj: 17461460  Informacije o delatnostima koje obavlja ova firma:  » Organizovanje sastanaka i sajmova 

In [20]:  print(type(some))
<class 'str'>    
In [21]: print(type(some.encode('utf-8', 'ignore')))
<class 'bytes'>

您正在使用i.text.encode('utf-8', 'ignore') 编码为bytes,根本不需要做任何事情来打印文本。

【讨论】:

  • 如果我只想打印文本,则会收到错误消息:File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode character '\u0106' in position 18: character maps to &lt;undefined&gt;
  • 您选择的编辑器是什么?我使用 PyCharm 并以某种方式设法设置文件编码。现在没问题,但控制台只返回了字符串的一部分...
  • 你在 cmd 中的区域设置是什么?
  • 相同。由于某种原因,它只返回字符串的一部分。它不再重要了..感谢您的帮助!
【解决方案2】:

b'\xc4\x86' 是一个字节对象,而不是字符串(你可以通过引号前面的“b”来判断)。因此,如果您尝试打印 bytes 对象,则受限 ascii 集之外的任何字符都将以其十六进制表示形式显示。要打印您想要查看的 utf-8 字符,您需要将字节对象解码为字符串对象(或者,查看您的代码,首先不要将其编码为字节对象)。

例如,试试:

>>> b'\xc4\x86'.decode()
'Ć'

有关字节和字符串的更多信息,请阅读此处: http://www.diveintopython3.net/strings.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2015-03-10
    • 2016-09-30
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多