Beautiful Soup を使用してディレクトリ内の HTML ファイルからテキストを抽出する Python スクリプトがあります。ただし、エンコーディングを正しく機能させるのに問題があります。最初は、HTML ファイル自体に問題があるのではないかと思いました。ただし、Notepad.exe で HTML ファイルのソースを表示すると、たとえば次のように表示されます。Vi er her for deg, og du må gjerne ta kontakt med oss på 815 32 000 eller på Facebook om du har noen spørsmål.
ただし、Internet Explorer で同じ HTML ファイルを表示すると、次のように表示されます。Vi er her for deg, og du mÃ¥ gjerne ta kontakt med oss pÃ¥ 815 32 000 eller pÃ¥ Facebook om du har noen spørsmÃ¥l.
また、Internet Explorer のテキストは、Python スクリプトがテキスト ファイルに追加するテキストと同じです。したがって、エンコーディングは明らかに検出可能であり、IE がそれを理解できないのは当然のことですが、Python がそれを処理できない理由を理解できないようです。エンコーディングは latin-1 である必要がありますが、これは問題にはならないと思いました。ここに私が持っているコードがあります:
import os
import glob
from bs4 import BeautifulSoup
path = "c:\\users\\me\\downloads\\"
for infile in glob.glob(os.path.join(path, "*.html")):
markup = (infile)
soup = BeautifulSoup(open(markup, "r").read())
with open("example.txt", "a") as myfile:
myfile.write(soup.get_text())
myfile.close()
それはエンコーディングを壊しているように見えるので、次のように latin-1 エンコーディングを渡すことができると思いました:
soup = BeautifulSoup(open(markup, "r").read())
soup = soup.prettify("latin-1")
しかし、それは私にエラーを与えます:
Traceback (most recent call last):
File "bsoup.py", line 12, in <module>
myfile.write(soup.get_text())
AttributeError: 'bytes' object has no attribute 'get_text'