Проблема кодирования Python с помощью Beautifulsoup - PullRequest
0 голосов
/ 23 февраля 2011

Здравствуйте, у меня проблема с кодировкой

Когда я помещаю строку в beautifulsoup, теряются все национальные символы

addr = "http://zjazdowa.com.pl/index.php/aktualne-ceny-warzyw-i-owocow-.html"                                
content = urllib2.urlopen(addr) .read()
html_pag = BeautifulSoup(content) #<- there i lost all national letters 
table_html= html_pag.find("div",  id="808") 

В заголовочном файле у меня есть:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib2, string, re , sys
reload(sys)
sys.setdefaultencoding("utf-8")

Ответы [ 2 ]

4 голосов
/ 23 февраля 2011

в соответствии с документацией BeautifulSoup все входные данные внутренне преобразованы в UTF8:

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup("Hello")
soup.contents[0]
# u'Hello'
soup.originalEncoding
# 'ascii'

если ваш ввод не указывает кодировку (например, мета-теги), догадывается BeautifulSoup. Вы можете отключить угадывание, указав кодировку ввода через параметр fromEncoding для BeautifulSoup:

soup = BeautifulSoup("hello", fromEncoding="UTF-8")

или ваша настоящая проблема - «неправильный» вывод результата на консоль?

1 голос
/ 28 ноября 2011

И ваш код работает отлично:

>>> addr = "http://zjazdowa.com.pl/index.php/aktualne-ceny-warzyw-i-owocow-.html"                                
>>> content = urllib2.urlopen(addr) .read()
>>> html_pag = BeautifulSoup(content) #<- there i lost all national letters 
>>> table_html= html_pag.find("div",  id="808")
>>> print table_html.findAll('td')[8].string
Kapusta włoska

Несколько замечаний по этому поводу:

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib2, string, re , sys
reload(sys)
sys.setdefaultencoding("utf-8")

reload перезагружает модуль.Я не уверен, что вы надеетесь сделать, перезагрузив sys, но это ничего вам не даст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...