2011-10-16 3 views
5

Quindi ho analizzato una pagina html con .findAll (BeautifulSoup) nella variabile denominata result. Se scriv result in Python shell quindi premere Invio, vedo il testo normale come previsto, ma come ho voluto postelaborare questo risultato come oggetto stringa, ho notato che str(result) rendimenti spazzatura, come in questo esempio:Come convertire BeautifulSoup.ResultSet in stringa

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

Html l'origine della pagina è utf-8 codificata

Come posso gestirlo?


codice è fondamentalmente questo, nel caso in cui è importante:

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

Python è 2.7

+0

mostrare il codice pls – cetver

risposta

10

Python 2.6.7 BeautifulSoup. versione 3.2.0

questo ha funzionato per me:

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

Sono abbastanza sicuro che un result è un oggetto BeautifulSoup.ResultSet, che sembra essere un ampliamento della lista standard di Python

0

Questo non è spazzatura, che è il testo UTF-8-encoded. Use Unicode instead.

+0

è comunemente usato termine per descrivere i problemi di de/codifica dei caratteri, non è certo spazzatura letteralmente – theta

+0

Ma non c'è alcun problema. Questo è testo con codifica UTF-8; semplicemente non lo riconosci. –

0

Utilizzare questa:

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

Unicode ha multiple normalization forms che la produzione non dovrebbe essere spazzatura.
Utilizzare l'attributo originalEncoding per verificare lo schema di codifica. Per quanto riguarda le implementazioni
unicode di Python, si riferiscono this document (anche per la normalizzazione)

+0

'soup.originalEncoding' restituisce' utf-8'. 'result' che è l'oggetto BS.ResultSet non supporta questo attributo. E sicuramente non voglio decodificare 'utf-8' e codificarlo in ASCII mentre perdo tutti i caratteri stranieri (in inglese). Voglio l'oggetto stringa 'utf-8' da questo oggetto BS.ResultSet – theta

+0

Hai provato a passare attraverso il link dato nella risposta di @ 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: La versione di BeautifulSoup è beautifulsoup-3.2.1