urlopen, BeautifulSoup и UTF-8 выпуск - PullRequest
2 голосов
/ 24 августа 2009

Я просто пытаюсь получить веб-страницу, но каким-то образом в HTML-файл встроен чужой символ. Этот символ не виден, когда я использую «Просмотр источника».

isbn = 9780141187983
url = "http://search.barnesandnoble.com/booksearch/isbninquiry.asp?ean=%s" % isbn
opener = urllib2.build_opener()
url_opener = opener.open(url)
page = url_opener.read()
html = BeautifulSoup(page) 
html #This line causes error.

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 21555: ordinal not in range(128)

Я тоже пробовал ...

html = BeautifulSoup(page.encode('utf-8'))

Как я могу прочитать эту веб-страницу в BeautifulSoup без этой ошибки?

Ответы [ 2 ]

11 голосов
/ 24 августа 2009

Эта ошибка, вероятно, действительно возникает, когда вы пытаетесь напечатать представление файла BeautifulSoup, что произойдет автоматически, если, как я подозреваю, вы работаете в интерактивной консоли.

# This code will work fine, note we are assigning the result 
# of the BeautifulSoup object to prevent it from printing immediately.
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(u'\xa0')

# This will probably show the error you saw
print soup

# And this would probably be fine
print soup.encode('utf-8')
1 голос
/ 22 декабря 2015

Вы можете попробовать следующее:

import codecs 
f = codecs.open(filename,'r','utf-8')
soup = BeautifulSoup(f.read(),"html.parser")

Я столкнулся с подобной проблемой с bs4

...