2016-04-14 11 views
6

Ich lerne Beautiful Soup in Python.Wie konvertiert man Unicode-Text in normalen Text

Ich versuche, eine einfache Webseite mit einer Liste von Büchern zu analysieren.

Z. B

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

Ich verwende den folgenden Code ein.

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> 

Und

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

Aber ich möchte den richtigen Text, die gegeben ist,

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

Wie meinen Code zu modifizieren, um zu geben Ausgang "Das Handbuch des Auto Hacker" statt von "u'The Car Hacker \ u2019s Handbuch" "?

Bitte helfen.

+3

Es ist nichts falsch mit dem Ergebnis, das Sie erhalten. Es ist eine Unicode-Zeichenfolge mit einem ausgefallenen Apostroph-Zeichen. – Selcuk

+0

Danke, @Selcuk. Aber, wie man diese Zeichenkette "u'The Car Hacker \ u2019s Handbuch" benutzt und in der Akte/in der Datenbank speichert? Wird es ordnungsgemäß gespeichert? Ich meine, ich habe versucht 'f.write (elems [0] .getText())', ich habe UnicodeEncodeError. –

+0

Danke, @Selcuk. Ich hab es geschafft. Ich habe 'elems [0] .getText(). Encode ('utf-8')' in Datei oder Datenbank speichern. –

Antwort

3

Haben Sie versucht, die Methode encode zu verwenden?

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

Weitere Informationen über Unicode und Python kann in https://docs.python.org/2/howto/unicode.html

Darüber hinaus finden, zu entdecken, wenn die Zeichenfolge richtig utf-8 codiert Sie chardet und führen Sie den folgenden Befehl verwenden:

>>> import chardet 
>>> chardet.detect(elems[0].getText()) 
{'confidence': 0.5, 'encoding': 'utf-8'} 
+0

DANKE. Ich probierte 'elems [0] .getText(). Encode ('utf-8')'. Es funktionierte. Python-Terminal druckt es als ''The Car Hacker \ xe2 \ x80 \ x99s Handbuch' 'aber wenn in eine Datei geschrieben, hat die Datei Inhalt' The Car Hacker's Handbook' drin. –

+0

Kühl. Ich habe die Antwort nur aus Gründen der Korrektheit editiert. – mschuh

+1

@madhusudan_k Willkommen bei SO. Wenn Sie glauben, dass Sie mit dieser Antwort das, was Sie gesucht haben, lösen, vergessen Sie nicht, die Antwort zu akzeptieren, indem Sie auf den Pfeil unter der Anzahl der Stimmen klicken. – Blaszard

-2

können Sie

import unicodedata 

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

versuchen diese konvertiert Unicodetext zu Nur-Text und Sie können in eine Datei schreiben.

+0

Es entfernt auch den "Apostroph", so dass der Buchtitel "The Car Hackers Handbook" wird. – BlackJack

Verwandte Themen