サイトからいくつかのmp3ポッドキャストをダウンロードして特定の場所に書き込むためのスクリプトを作成しています。ほぼ完成し、ファイルがダウンロードおよび作成されています。ただし、バイナリデータを完全にデコードできず、mp3ファイルが再生されないという問題が発生しています。
これが私のコードです:
import re
import os
import urllib2
from bs4 import BeautifulSoup
import time
def getHTMLstring(url):
html = urllib2.urlopen(url)
soup = BeautifulSoup(html)
soupString = soup.encode('utf-8')
return soupString
def getList(html_string):
urlList = re.findall('(http://podcast\.travelsinamathematicalworld\.co\.uk\/mp3/.*\.mp3)', html_string)
firstUrl = urlList[0]
finalList = [firstUrl]
for url in urlList:
if url != finalList[0]:
finalList.insert(0,url)
return finalList
def getBinary(netLocation):
req = urllib2.urlopen(netLocation)
reqSoup = BeautifulSoup(req)
reqString = reqSoup.encode('utf-8')
return reqString
def getFilename(string):
splitTerms = string.split('/')
fileName = splitTerms[-1]
return fileName
def writeFile(sourceBinary, fileName):
with open(fileName, 'wb') as fp:
fp.write(sourceBinary)
def main():
htmlString = getHTMLstring('http://www.travelsinamathematicalworld.co.uk')
urlList = getList(htmlString)
fileFolder = 'D:\\Dropbox\\Mathematics\\Travels in a Mathematical World\\Podcasts'
os.chdir(fileFolder)
for url in urlList:
name = getFilename(url)
binary = getBinary(url)
writeFile(binary, name)
time.sleep(2)
if __name__ == '__main__':
main()
コードを実行すると、コンソールに次の警告が表示されます。
警告:root:一部の文字はデコードできず、REPLACEMENTCHARACTERに置き換えられました。
私が使用しているデータがUTF-8でエンコードされているという事実と関係があると思います。おそらく、書き込みメソッドは別のエンコードを予期しているのでしょうか。私はPython(そして実際にはプログラミング全般)に不慣れで、行き詰まっています。