2011-10-16 28 views
5

Vì vậy, tôi đã phân tích cú pháp trang html với .findAll (BeautifulSoup) thành biến có tên result. Nếu tôi gõ result bằng Python vỏ sau đó nhấn Enter, tôi thấy văn bản bình thường như mong đợi, nhưng như tôi muốn xử lý sau kết quả này là đối tượng chuỗi, tôi nhận thấy rằng str(result) lợi nhuận rác, giống như mẫu này:Cách chuyển đổi BeautifulSoup.ResultSet thành chuỗi

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

Html nguồn trang là utf-8 được mã hóa

Tôi có thể xử lý điều này bằng cách nào?


Mã là cơ bản này, trong trường hợp quan trọng:

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

Python là 2,7

+0

hiển thị mã yêu cầu của bạn – cetver

Trả lời

10

Python 2.6.7 BeautifulSoup. phiên bản 3.2.0

này đã làm việc cho tôi:

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

Tôi chắc rằng một result là một đối tượng BeautifulSoup.ResultSet, mà dường như là một phần mở rộng của danh sách python chuẩn

0

Đó không phải là rác, đó là văn bản UTF-8 mã hóa. Use Unicode instead.

+0

thường được sử dụng thuật ngữ để mô tả các vấn đề de/mã hóa ký tự, nó chắc chắn không phải rác theo nghĩa đen – theta

+0

Nhưng không có vấn đề gì. Đó là văn bản được mã hóa UTF-8; bạn chỉ không nhận ra nó. –

0

Sử dụng này:

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

Unicode có multiple normalization forms Đó đầu ra không nên gom rác thải.
Sử dụng thuộc tính originalEncoding để xác minh lược đồ mã hóa.
Về triển khai unicode của python, hãy tham khảo this document (ngay cả đối với chuẩn hóa)

+0

'soup.originalEncoding' trả về' utf-8'. 'result' là đối tượng BS.ResultSet không hỗ trợ thuộc tính này. Và tôi chắc chắn không muốn giải mã 'utf-8' và mã hóa thành ASCII khi tôi mất tất cả các ký tự nước ngoài (sang tiếng Anh). Tôi muốn 'utf-8' chuỗi đối tượng ra khỏi đối tượng BS.ResultSet này – theta

+0

Bạn đã thử đi qua các liên kết được đưa ra trong câu trả lời @ 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: Phiên bản của BeautifulSoup là beautifulsoup-3.2.1

Các vấn đề liên quan