Вопрос

В следующем коде Python используется BeautifulStoneSoup для извлечения информации API LibraryThing для Толкина «Дети Н» Рин.

import urllib2

from BeautifulSoup import BeautifulStoneSoup

URL = ("http://www.librarything.com/services/rest/1.0/"
            "?method=librarything.ck.getwork&id=1907912"
            "&apikey=2a2e596b887f554db2bbbf3b07ff812a")

soup = BeautifulStoneSoup(urllib2.urlopen(URL),
                          convertEntities=BeautifulStoneSoup.ALL_ENTITIES)
title_field = soup.find('field', attrs={'name': 'canonicaltitle'})
print title_field.find('fact').string

К сожалению, вместо 'H & rin' он печатает 'H & # 195; & # 186; rin'. Это очевидно проблема кодирования, но я не могу понять, что мне нужно сделать, чтобы получить ожидаемый результат. Помощь будет принята с благодарностью.

Это было полезно?

Решение

В источнике веб-страницы это выглядит так: The Children of H & Atilde; & amp; ordm; rin . Таким образом, кодировка уже нарушена где-то на их стороне, прежде чем она даже преобразуется в XML ...

Если это общая проблема со всеми книгами, и вам нужно ее обойти, похоже, это сработает:

unicode(title_field.find('fact').string).encode("latin1").decode("utf-8")

Другие советы

Веб-страница может лгать о своей кодировке. Выход выглядит как UTF-8. Если у вас есть str в конце, вам нужно будет декодировать его как UTF-8. Если вместо этого у вас есть Unicode, вам нужно сначала кодировать как Latin-1.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top