2016-04-14 28 views
6

Python'da Güzel Çorba öğreniyorum.Unicode metni normal metne dönüştürme

Kitap listesiyle basit bir web sayfasını ayrıştırmaya çalışıyorum. Örn

<a href="https://www.nostarch.com/carhacking">The Car Hacker’s Handbook</a> 

Ben aşağıdaki kodu kullanabilirsiniz.

import requests, bs4 
res = requests.get('http://nostarch.com') 
res.raise_for_status() 
nSoup = bs4.BeautifulSoup(res.text,"html.parser") 
elems = nSoup.select('.product-body a') 

#elems[0] gives 
<a href="https://www.nostarch.com/carhacking">The Car Hacker\u2019s Handbook</a> 

Ve

#elems[0].getText() gives 
u'The Car Hacker\u2019s Handbook' 

Ama verilir uygun metni istiyorum, "Araç Hacker'ın El Kitabı" çıktı yerine vermek amacıyla kodumu nasıl değiştirilir

s = elems[0].getText() 
print s 
>>>The Car Hacker’s Handbook 

"Araba Hacker \ u2019s El Kitabı" nın "?"

Lütfen yardım edin.

+3

Aldığınız sonuçla ilgili bir sorun yok. Bir fantezi kesme karakteri olan bir unicode dizedir. – Selcuk

+0

Teşekkürler, @Selcuk. Ama bu dizeyi "u'The Car Hacker \ u2019s Handbook '" ile nasıl kullanılır ve dosya/veritabanında saklarsınız? Doğru şekilde kaydedilecek mi? Ben f.write (elems [0] .getText()) 'denedim, UnicodeEncodeError var. –

+0

Teşekkürler, @Selcuk. Anladım. Dosya veya veritabanına kaydetmek için 'elems [0] .getText(). Encode (' utf-8 ') 'ifadesini kullandım. –

cevap

3

Kodlama yöntemini kullanmayı denediniz mi?

>>> import chardet 
>>> chardet.detect(elems[0].getText()) 
{'confidence': 0.5, 'encoding': 'utf-8'} 
: unicode ve piton hakkında

elems[0].getText().encode('utf-8') 

diğer bilgiler dize gerçekten utf-8 chardet kullanmak ve aşağıdaki komutu çalıştırabilirsiniz kodlanmış olup olmadığını keşfetmek için Dahası https://docs.python.org/2/howto/unicode.html

, bulunabilir

+0

TEŞEKKÜRLER. Ben elemleri denedim [0] .getText(). Encode ('utf-8') '. İşe yaradı. Python terminali, '' Araba Hacker \ xe2 \ x80 \ x99s El Kitabı '' olarak yazdırır, ancak bir dosyaya yazılırsa dosya içeriğinde 'Araba Korsanının El Kitabı' bulunur. –

+0

Serin. Cevabı sadece doğruluk adına düzenledim. – mschuh

+1

@madhusudan_k SO'ya hoş geldiniz. Bu cevapla aradığınızı çözdüğünüzü düşünüyorsanız, oylama sayısının hemen altındaki oku tıklayarak cevabı kabul etmeyi unutmayın. – Blaszard

-2

Eğer

import unicodedata 

def normText(unicodeText): 
return unicodedata.normalize('NFKD', unicodeText).encode('ascii','ignore') 

Bu dönüştürür deneyebilirsiniz düz metne unicodetext ve bir dosyaya yazabilirsiniz.

+0

Ayrıca "kesme işareti" çıkarır, böylece kitap başlığı "Araba Hackerları El Kitabı" haline gelir. – BlackJack

İlgili konular