2011-10-16 17 views
5

Więc sparsowałem stronę html z .findAll (BeautifulSoup) do zmiennej o nazwie result. Gdybym wpisać result w Pythonie skorupy a następnie naciśnij Enter, widzę normalny tekst zgodnie z oczekiwaniami, ale jak chciałem do przetworzenia ten wynik jako obiekt String, zauważyłem, że str(result) powraca śmieci, jak to próba:Jak przekonwertować BeautifulSoup.ResultSet na ciąg

\xd1\x87\xd0\xb8\xd0\xbb\xd0\xbd\xd0\xb8\xd1\x86\xd0\xb0</a><br />\n<hr />\n</div> 

HTML źródłem strony jest utf-8 kodowana

Jak mogę sobie z tym poradzić?


Kod jest w zasadzie to, w przypadku jest to ważne:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(urllib.open(url).read()) 
result = soup.findAll(something) 

Python 2.7

+0

wyświetl swój kod pls – cetver

Odpowiedz

10

Python 2.6.7 BeautifulSoup. wersja 3.2.0

Ten pracował dla mnie:

unicode.join(u'\n',map(unicode,result)) 

Jestem całkiem pewien, result jest BeautifulSoup.ResultSet przedmiot, który wydaje się być rozszerzenie standardowej listy Pythona

0

To nie śmieci, to UTF-8 zakodowany tekst. Use Unicode instead.

+0

jest powszechnie używany Termin opisujący problemy z de/kodowaniem znaków, to na pewno nie śmieci dosłownie – theta

+0

Ale nie ma problemu. To jest tekst zakodowany w UTF-8; po prostu tego nie rozpoznajesz. –

0

Użyj tego:

unicodedata.normalize('NFKC', p.decode()).encode('ascii','ignore') 

Unicode ma multiple normalization forms że produkcja nie powinna być śmieci.
Użyj atrybutu originalEncoding, aby zweryfikować schemat kodowania.
Odnośnie implementacji unicode Pythona, odnieś się do: this document (nawet w celu normalizacji):

+0

'soup.originalEncoding' zwraca' utf-8'. 'result', który jest obiektem BS.ResultSet, nie obsługuje tych atrybutów. I na pewno nie chcę dekodować 'utf-8' i kodować do ASCII, ponieważ tracę wszystkie obce (do angielskich) znaków. Chcę obiektu ciąg "utf-8" z tego obiektu BS.ResultSet – theta

+0

Czy próbowałeś przejść przez link podany w odpowiedzi @ Ignacio? –

3
from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(urllib.open(url).read()) 
#findAll should get multiple parsed result 
result = soup.findAll(something) 
#then iterate result 
for line in result: 
    #get str value from each line,replace charset with utf-8 or other charset you need 
    print line.__str__('charset') 

BTW: Wersja BeautifulSoup to beautifulsoup-3.2.1

Powiązane problemy