使用pyCURL下载并获取mp3文件内容

0 投票
1 回答
1338 浏览
提问于 2025-04-18 09:32

我正在尝试从下载的文件中获取内容。如果我把文件保存为 .mp3 格式,它甚至可以播放。但是当我获取内容时,里面有很多“可怕”的字符,比如 (û dInfo.ð"""".....::::EEEEEQQQQ]]]]]hhhhttttt¢¢¢¢®®®®®ººººÅÅÅÅÅÑÑÑÑÝÝÝÝÝèèèèôôôôôÿÿÿÿ:LAME3.96r´.l4 $N .ð]Ú5ÿû d Ô|c½i4BGçá"ʹU§ a0pTìÌ xà0 +£â?=yÃkðý§ýÛußAfØÿ®ÙBDgøQÊ0£a=¹ OTG@ )É ÄN¨hÎDMWQÛ0wmrÛA MdCeÞ9:!b>¢~Ú½´&ÞýÛ/¿h­·{þ>Åï²{·w±Ä,ÅõtewßS©?Ï'è! p@lHåÀ1üoù!c Aæø?Íæ0#äzôüÿsì§òp}o¾Ðn¨:Ð À@1®-0¦ ÐËÛþÐ褹À~! êõCÄâr+Ççú!ɱA3uå^O¦I÷'ív(µ~ÉNÎ~8æÙøÕ+Xy¬gt}êÑ3xk¿½ÞZ÷]ë^ÖÅ¢}åýíªn¾?µ)_{×ÇÎÿÝ>ÿzÞ>wÿß¾5﬿»ü}z}kDtwk)Ó=Ú[ÿzfXÞµ%q Gŧ~(°Ë%¬ÇºJùÝÇá3JBĸÑâ·Ê!W²qll°¡WÎÚRÕ¨âU0BD$F$ÅÕÀèûÏ*©l^Î¥¢3ëÿû¢d¬LY~s`AJ@Á%ù­ 4¨ËÍ;3sB½²ý»é¨murz{S0Ühà @Qö0Â(ÚFíê9(øi¸ò½¸~äÌ]ï¼a b°±±§Rióÿ÷·±O?Ã?:3£M20 /ÿÿÿçßîzöDIþï_ÿÿÿÿú±c>a¾¨2e ÁÙ£¯ÿÿÿÿÿýþÿÿÿÿ ![]h1EOFðKçYwA%ÜSԾó":9Ç5 RþèvC?7òEWÔ´üJdzcKÿÿTdp Lï¬DÆØ£Rm7£Ww·´ÅUeé¢hÇRî÷ @\uä«À#¿6òXµËÖÿ+U Oó}å-) 这是我的代码:

    fp = open('audio.txt', "wb")
    ch = curl.Curl()

    ch.setopt(curl.URL, url)
    ch.setopt(curl.TRANSFERTEXT, True)
    ch.setopt(curl.AUTOREFERER, True)
    ch.setopt(curl.FOLLOWLOCATION, True)
    ch.setopt(curl.POST, False)
    ch.setopt(curl.HTTPHEADER, ['REMOTE_ADDR:' + self.ip, 'HTTP_X_FORWARDED_FOR:' + self.ip])
    ch.setopt(curl.USERAGENT, self.useragent)
    ch.setopt(curl.CONNECTTIMEOUT, self.connect_timeout)
    ch.setopt(curl.TIMEOUT, self.curl_timeout)
    ch.setopt(curl.SSL_VERIFYPEER, False)
    ch.setopt(curl.COOKIE, "JSESSIONID=" + sessionid)
    ch.setopt(curl.WRITEDATA, fp)
    try:
        result = ch.perform()
    except curl.error as error:
        #errno, errstr = error
        ch.close()
        return 'Ошибка считывания mp3 файла с сервиса ФМС.'
    fp.close()
    with open('audio.txt', 'r', encoding = "ISO-8859-1") as content_file:
        content_file.seek(0)
        content = content_file.read()
    return content

我该如何获取正常的字符(使用UTF8编码)呢?谢谢。

1 个回答

0

试着去掉 ch.setopt(curl.TRANSFERTEXT, True) 这一行,因为 mp3 文件是二进制格式的。

然后把 fp = open('audio.txt', "wb") 改成 fp = open('audio.mp3', "wb"),这样你就能把正确的 mp3 文件保存到磁盘上了。

接下来可以试试下面的代码:

import mp3play
filename = r'audio.mp3'
mp3 = mp3play.load(filename)
mp3.play()

你需要先安装 mp3play 这个包。

撰写回答