BeautifulSoup findall mit class-Attribut - unicode-encode Fehler
Ich bin mit BeautifulSoup zum extrahieren von Nachrichten Geschichten(nur die Titel) von Hacker News und haben soviel bis jetzt-
import urllib2
from BeautifulSoup import BeautifulSoup
HN_url = "http://news.ycombinator.com"
def get_page():
page_html = urllib2.urlopen(HN_url)
return page_html
def get_stories(content):
soup = BeautifulSoup(content)
titles_html =[]
for td in soup.findAll("td", { "class":"title" }):
titles_html += td.findAll("a")
return titles_html
print get_stories(get_page()
)
Wenn ich den code ausführen, jedoch gibt es einen Fehler-
Traceback (most recent call last):
File "terminalHN.py", line 19, in <module>
print get_stories(get_page())
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe2' in position 131: ordinal not in range(128)
Wie bekomme ich diese zu arbeiten?
InformationsquelleAutor | 2011-04-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil BeautifulSoup arbeitet intern mit unicode-Zeichenketten. Drucken von unicode-strings auf der Konsole verursachen Python zu versuchen, die Umwandlung von unicode in den default-encoding von Python ist in der Regel ascii. Dies wird im Allgemeinen nicht für nicht-ascii-web-site. Sie können lernen, die Grundlagen von Python und Unicode durch googeln für "python + unicode". Inzwischen konvertieren
die unicode-strings in utf-8 mit
.encode('utf-8')
Konvertierung von Unicode-string in einen UTF-8-codierte Zeichenfolge.InformationsquelleAutor Andreas Jung
Eine Sache zu beachten, über die Ihr code ist, dass
findAll
gibt eine Liste (in diesem Fall eine Liste von BeautifulSoup-Objekte) und Sie wollen nur den Titel. Sie möchten möglicherweise verwenden Siefind
statt. Und anstatt zu drucken eine Liste von BeautifulSoup Objekte, Sie sagen, Sie wollen einfach nur die Titel. Das folgende funktioniert gut, zum Beispiel:So, jetzt
get_stories()
gibt eine Liste vonunicode
Objekte, die druckt wie man es erwarten würde.InformationsquelleAutor Mark Longair
Funktioniert es einwandfrei, was kaputt ist ist der Ausgang. Entweder explizit Kodieren, um Ihre Konsole Zeichensatz, oder finden Sie eine andere Möglichkeit zum ausführen von code (z.B. in IDLE).
InformationsquelleAutor Ignacio Vazquez-Abrams