1

サイトからいくつかの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(そして実際にはプログラミング全般)に不慣れで、行き詰まっています。

4

1 に答える 1

2

あなたがURLからいくつかのmp3ファイルをダウンロードしたいと仮定します。
これらのURLは。を介して取得できますBeautifulSoupBeautifulSoupただし、URLの解析にを使用する必要はありません。直接保存する必要があります。
例えば、

url = 'http://acl.ldc.upenn.edu/P/P96/P96-1004.pdf'
res = urllib2.urlopen(url)
with open(fileName, 'wb') as fp:
    fp.write(res.read())

BeautifulSoupそのpdfURLを解析するために使用する場合

reqSoup = BeautifulSoup('http://acl.ldc.upenn.edu/P/P96/P96-1004.pdf')

reqSoupはpdfファイルではなく、HTML応答です。実は

<html><body><p>http://acl.ldc.upenn.edu/P/P96/P96-1004.pdf</p></body></html>
于 2013-02-23T08:27:17.823 に答える