0

Im пытается захватить некоторые данные и вот мой код:Python - Cant сделать это, чтобы закодировать строку правильно

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 должно быть представлено письмом Ć.

Как я могу заставить его работать?

+2

Почему бы не просто напечатать текст? –

ответ

0

У вас уже есть строка, просто напечатать текст:

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'> 

Вы кодируете bytes с i.text.encode('utf-8', 'ignore'), нет необходимости делать что-либо вообще, печатать текст.

+0

Если я хочу напечатать только текст, тогда я получаю ошибку: 'Файл 'C: \ Python34 \ lib \ encodings \ cp1252.py", строка 19, в кодировке return codecs.charmap_encode (input, self.errors, encoding_table) [0] UnicodeEncodeError: кодек 'charmap' не может кодировать символ '\ u0106' в позиции 18: символьные карты до ' – RhymeGuy

+0

Какой у вас редактор? Я использовал PyCharm и каким-то образом смог установить кодировку файлов. Теперь все в порядке, но консоль возвращает мне только одну часть строки ... – RhymeGuy

+0

Какова ваша локаль, установленная в cmd? –

0

b'\xc4\x86' - объект с байтами, а не строка (вы можете указать «b» перед кавычкой). Поэтому любые символы, находящиеся за пределами ограниченного набора ascii, будут отображаться шестнадцатеричным представлением, если вы попытаетесь напечатать объект байтов. Чтобы напечатать символы utf-8, которые вы хотите увидеть, вам нужно декодировать объект байтов на строковый объект (или, глядя на ваш код, просто не кодируйте его в объект байтов в первую очередь).

Например, попробуйте:

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

Для получения более подробной информации читайте о байтах и ​​строки здесь: http://www.diveintopython3.net/strings.html

Смежные вопросы