2015-09-04 1 views
-1

Я проанализировал текст (названия городов) с веб-сайта, используя BeautifulSoup, в список, однако столкнулся с проблемой, которую я не могу преодолеть. Текстовые элементы на веб-сайте имели специальные символы, и когда я печатаю список, названия городов отображаются как [u'London], а вместо специальных символов появляются цифры и буквы. Как я могу избавиться от «u» в начале и преобразовать текст в формат, как первоначально было показано на веб-сайте?Строка со специальными символами в Python не отображается правильно

Вот код:

import urllib2 
from bs4 import BeautifulSoup 

address = 'https://clinicaltrials.gov/ct2/show/NCT02226120?resultsxml=true' 

page = urllib2.urlopen(address) 
soup = BeautifulSoup(page) 
locations = soup.findAll('country', text="Hungary") 
for city_tag in locations: 
    site=city_tag.parent.name 
    if site=="address": 
     desired_city=str(city_tag.findPreviousSibling('city').contents) 
     print desired_city 

и вот что я получаю в качестве вывода:

[u'Pecs'] 
[u'Baja'] 
[u'Balatonfured'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Budapest'] 
[u'Cegled'] 
[u'Debrecen'] 
[u'Eger'] 
[u'Hodmezovasarhely'] 
[u'Miskolc'] 
[u'Nagykanizsa'] 
[u'Nyiregyh\xe1za'] 
[u'Pecs'] 
[u'Sopron'] 
[u'Szeged'] 
[u'Szekesfehervar'] 
[u'Szekszard'] 
[u'Zalaegerszeg'] 

7-й элемент из нижней части [u'Nyiregyh \ xe1za '], например, не отображаются правильно.

+0

Префикс u предназначен только для исходного кода; если вы это видите, это потому, что вы печатаете представление объекта. Помогает ли [Unicode HOWTO] (https://docs.python.org/2/howto/unicode.html#reading-and-writing-unicode-data)? Вероятно, вам нужно будет показать некоторый код, если вы хотите больше, чем общий указатель на документы для кодирования символов. – dsh

ответ

0

Вы использовали str() для преобразования объекта вы так что он может быть распечатана:

desired_city=str(city_tag.findPreviousSibling('city').contents) 
    print desired_city 

Вы не только видите «и» префикс, который вы просили об этом, но вы также видите [] и ''. Эти знаки пунктуации являются частью того, как эти типы объектов преобразуются в текст по str(): [] указывает, что у вас есть объект списка. u'' указывает, что объект в списке является «текстом». Примечание: Python 2 довольно неряшлив в обработке байтов по сравнению с символами. Эта неряшливость смущает многих людей, особенно потому, что иногда она работает даже тогда, когда она неправильна и не работает с другими данными или средами.

Поскольку у вас есть список, содержащий объект Юникода, вы хотите напечатать это значение:

list_of_cities = city_tag.findPreviousSibling('city').contents 
    desired_city = list_of_cities[0] 
    print desired_city 

Обратите внимание, что я предполагаю, список городов будет иметь по крайней мере один элемент. Образец вывода, который вы показываете, таков, но было бы неплохо также проверить условия ошибок.

+0

большое спасибо –