2015-06-10 14 views
14

Tôi muốn làm cho công cụ tìm kiếm và tôi làm theo hướng dẫn trong một số trang web. Tôi muốn thử nghiệm phân tích cú pháp htmlPython 3 UnicodeDecodeError: 'charmap' giải mã không thể giải mã byte 0x9d

from bs4 import BeautifulSoup 

def parse_html(filename): 
    """Extract the Author, Title and Text from a HTML file 
    which was produced by pdftotext with the option -htmlmeta.""" 
    with open(filename) as infile: 
     html = BeautifulSoup(infile, "html.parser", from_encoding='utf-8') 
     d = {'text': html.pre.text} 
     if html.title is not None: 
      d['title'] = html.title.text 
     for meta in html.findAll('meta'): 
      try: 
       if meta['name'] in ('Author', 'Title'): 
        d[meta['name'].lower()] = meta['content'] 
      except KeyError: 
       continue 
     return d 

parse_html("C:\\pdf\\pydf\\data\\muellner2011.html") 

và nó nhận được lỗi

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 867: character maps to <undefined>enter code here 

tôi thấy một số giải pháp trên Web bằng cách sử dụng mã hóa(). Nhưng tôi không biết làm thế nào để chèn mã hóa() chức năng trong mã. Ai giúp tôi với?

+0

** toàn bộ truy xuất ngoại lệ ** là gì? –

Trả lời

30

Trong văn bản Python 3, các file được mở (giải mã sang Unicode) cho bạn; bạn không cần phải nói cho BeautifulSoup biết codec nào cần giải mã.

Nếu giải mã dữ liệu không thành công, đó là vì bạn đã không yêu cầu open() hãy gọi codec nào sẽ sử dụng khi đọc tệp; thêm codec đúng với đối số encoding:

with open(filename, encoding='utf8') as infile: 
    html = BeautifulSoup(infile, "html.parser") 

nếu không tệp sẽ được mở bằng codec mặc định hệ thống, phụ thuộc vào hệ điều hành.

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