Je veux faire un moteur de recherche et je suis un tutoriel sur certains sites web. Je veux tester l'analyse HTML
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")
et il obtient une erreur
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 867: character maps to <undefined>enter code here
J'ai vu quelques solutions sur le Web en utilisant l'encode (). Mais je ne sais pas comment insérer la fonction encode () dans le code. Quelqu'un peut-il m'aider?
Dans Python 3, les fichiers sont ouverts sous forme de texte (décodés en Unicode) pour vous; vous n'avez pas besoin de dire à BeautifulSoup à partir de quel codec décoder.
Si le décodage des données échoue, c'est parce que vous n'avez pas dit à la fonction open()
quel codec utiliser lors de la lecture du fichier; ajoutez le codec correct avec un argument encoding
:
with open(filename, encoding='utf8') as infile:
html = BeautifulSoup(infile, "html.parser")
sinon, le fichier sera ouvert avec le codec par défaut de votre système, qui dépend du système d'exploitation.