Python中包含特殊字符的字符串无法正确显示

时间:2015-09-04 17:57:37

标签: python unicode beautifulsoup special-characters

我已经使用BeautifulSoup将一些文本(城市名称)解析为一个列表,但遇到了一个我无法克服的问题。网站上的文字元素有特殊字符,当我打印列表时,城市名称显示为[u'伦敦],而不是特殊字符,则会显示数字和字母。我该如何摆脱“你好”。在开头并将文本转换为最初出现在网站上的格式?

以下是代码:

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

例如,来自底部[u' Nyiregyh \ xe1za']的第7个元素无法正确显示。

1 个答案:

答案 0 :(得分:0)

您使用str()转换了您可以打印的对象:

from_id

您不仅会看到您询问的“u”前缀,还会看到 desired_city=str(city_tag.findPreviousSibling('city').contents) print desired_city []。这些标点符号是''如何将这些类型的对象转换为文本的一部分:str()表示您有一个列表对象。 []表示列表中的对象是“text”。 注意:Python 2在处理字节与字符时非常草率。这种邋is使许多人感到困惑,特别是因为有时它似乎即使在错误的情况下也能工作,并且在其他数据或环境中失败。

由于您有一个包含unicode对象的列表,因此您希望打印该值:

u''

请注意,我假设城市列表至少包含一个元素。您显示的示例输出就是这样,但最好也检查错误条件。