Python 3 Urlopen vs Urlretreive
-
09-10-2019 - |
質問
私は歴史的な株価をダウンロードして処理するためのスクリプトに取り組んでいます。 urllib.request.urlopenを使用したとき、すべてのファイル(b ' xef xbb xbf)に奇妙なテキストのプレフィックスを取得しました。ブラウザ(Firefox)。答えがありますが、そもそもなぜ問題を引き起こしているのかわかりません。私はそれをひもにしたことを強制したからかもしれませんが、それがなぜなのか、どのようにそれを回避するかはわかりません(代わりにurlretrieveを使用する以外)。コードは以下にあります。関連する行は行11です。コメントされたコードは、私がOrlopenを使用していたときです。
#download a bunch of historical stock quotes from google finance
import urllib.request
symbolarray = []
symbolfile = open("symbols.txt")
for line in symbolfile:
symbolarray.append(line.strip())
symbolfile.close()
for symbol in symbolarray:
page = urllib.request.urlretrieve("http://www.google.com/finance/historical?q=NYSE:"+symbol+"&output=csv",symbol+".csv")
#datafile = open(symbol+".csv","w")
#datafile.write(str(page.read()))
#datafile.close()
解決
0xef、0xbb、0xbfはです UTF-8のBOM. 。これは、これがUTF-8エンコードされた文字列であることを意味します。 Wiresharkを使用すると、それがずっとそこにあることがわかります。ほとんどのプログラムがそれを無視しているだけです。
それ以外の str(page.read())
試してみてください page.read().decode('utf-8-sig')
BOMを削除したい場合。保持したい場合は、「UTF-8」だけでデコードできます。
所属していません StackOverflow