在Windows中使用Python下载Mp3会破坏歌曲,但在Linux中不会';T
我已经在Python中设置了一个使用urllib2下载mp3的脚本在Windows中使用Python下载Mp3会破坏歌曲,但在Linux中不会';T,python,httpwebrequest,mp3,web-scraping,Python,Httpwebrequest,Mp3,Web Scraping,我已经在Python中设置了一个使用urllib2下载mp3的脚本 url = 'example.com' req2 = urllib2.Request(url) response = urllib2.urlopen(req2) #grab the data data = response.read() mp3Name = "song.mp3" song = open(mp3Name, "w") song.write(data) # was data2 song.close() 事实
url = 'example.com'
req2 = urllib2.Request(url)
response = urllib2.urlopen(req2)
#grab the data
data = response.read()
mp3Name = "song.mp3"
song = open(mp3Name, "w")
song.write(data) # was data2
song.close()
事实证明,它与我在Windows或当前Python版本上下载它有某种关联。我在我的Ubuntu发行版上测试了代码,下载的mp3文件非常好。。。所以我只使用了简单的urllib2.openurl
方法,它工作得非常好
总结如下:
- 我正在Ubuntu发行版上使用Python中的
urllib2.openurl
- 我正在使用Python的更新版本,但我觉得不可能是这样李>
- mp3是用LAME编码的
有没有人知道是什么原因导致了在我的Windows机器上运行代码的奇怪问题?我想知道为什么在Windows上下载会损坏mp3 尝试二进制文件模式<代码>打开(mp3Name,“wb”) 你可能会得到行尾翻译
文件是二进制的,是的。这是不是模式。打开文件时,可以将其设置为作为文本文件读取(这是默认设置)。执行此操作时,它将转换线端点以匹配平台。在Windows上,行尾是
\r\n
,在大多数其他位置,行尾是\r
或\n
。这一更改会弄乱数据流。真是疯了!我以为它已经是二进制的了,否则它就不能播放了。我以为它是默认打开的@塞瑟伦:我在答案中添加了一些细节。