Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我不能下载带有python请求的midi文件吗?_Python_Download_Python Requests_Web Crawler_Midi - Fatal编程技术网

为什么可以';我不能下载带有python请求的midi文件吗?

为什么可以';我不能下载带有python请求的midi文件吗?,python,download,python-requests,web-crawler,midi,Python,Download,Python Requests,Web Crawler,Midi,我正在尝试使用python和请求库下载一系列经典音乐midi文件。不幸的是,我自己似乎无法下载midi文件。我唯一下载的是HTML文件。我搜索了SO并尝试了其他一些解决方案,例如,和,但这两种解决方案对我都不起作用 以下是我编写的代码: from bs4 import BeautifulSoup import requests import re url = 'http://www.midiworld.com/classic.htm' headers = {'User-Agent':'Mozi

我正在尝试使用python和请求库下载一系列经典音乐midi文件。不幸的是,我自己似乎无法下载midi文件。我唯一下载的是HTML文件。我搜索了SO并尝试了其他一些解决方案,例如,和,但这两种解决方案对我都不起作用

以下是我编写的代码:

from bs4 import BeautifulSoup
import requests
import re

url = 'http://www.midiworld.com/classic.htm'
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
r = requests.get(url, headers=headers)
data = r.text
soup = BeautifulSoup(data, "html.parser")

links = []
for link in soup.find_all("a", href=re.compile("mid$")):
    links.append(link['href'])


def get_filename(links):
    filenames = []
    """
    Will return a list of filenames for the files to be downloaded
    """
    for link in links:
        url = link
        if url.find('/'):
            f_name = url.rsplit('/', 1)[1]
            print(url.rsplit('/', 1)[1])
            filenames.append(f_name)
    return filenames


def download_files(links, filenames):
    for link, filename in zip(links, filenames):
        r = requests.get(url, allow_redirects=True)
        with open(filename, 'wb') as saveMidi:
            saveMidi.write(r.content)

filenames = get_filename(links)
download_files(links, filenames)

我不明白为什么要返回html文件。关于如何正确下载midi文件有什么想法吗?

我不知道为什么,但这对我来说很有效

from urllib.request import urlopen
x = urlopen(links[0]).read()
with open(filenames[0], "wb") as f:
    f.write(x)

我不知道为什么,但这对我很有效

from urllib.request import urlopen
x = urlopen(links[0]).read()
with open(filenames[0], "wb") as f:
    f.write(x)

我解决了这个问题,但我不得不对你的代码做一些重大修改。修订守则:

import requests
from bs4 import BeautifulSoup
import re

main_page = requests.get('http://www.midiworld.com/classic.htm')
parsed_page = BeautifulSoup(main_page.content, 'html.parser')

links = parsed_page.find_all('a', href=re.compile('mid$'))
def getFileName(link):
    link = link['href']
    filename = link.split('/')[::-1][0]
    return filename

def downloadFile(link, filename):
    mid_file = requests.get(link['href'], stream=True)
    with open(filename, 'wb') as saveMidFile:
        saveMidFile.write(mid_file.content)
        print('Downloaded {} successfully.'.format(filename))

for link in links:
    filename = getFileName(link)
    downloadFile(link, filename)
这似乎可以快速轻松地下载文件。他们都没有被腐蚀,我可以玩得很好。
感谢您将我的主文件夹中的古典音乐tho弄得乱七八糟。

我解决了这个问题,但我不得不对您的代码进行一些重大更改。修订守则:

import requests
from bs4 import BeautifulSoup
import re

main_page = requests.get('http://www.midiworld.com/classic.htm')
parsed_page = BeautifulSoup(main_page.content, 'html.parser')

links = parsed_page.find_all('a', href=re.compile('mid$'))
def getFileName(link):
    link = link['href']
    filename = link.split('/')[::-1][0]
    return filename

def downloadFile(link, filename):
    mid_file = requests.get(link['href'], stream=True)
    with open(filename, 'wb') as saveMidFile:
        saveMidFile.write(mid_file.content)
        print('Downloaded {} successfully.'.format(filename))

for link in links:
    filename = getFileName(link)
    downloadFile(link, filename)
这似乎可以快速轻松地下载文件。他们都没有被腐蚀,我可以玩得很好。
感谢您在我的主文件夹中乱放古典音乐tho。

如果有人想使用shell拼写:

wget https://www.midiworld.com/mozart.htm
cat mozart.htm | grep -oh -E 'https(.*)\.mid"' | sed 's/"//' | xargs wget -c -t1
rm mozart.htm

如果有人想使用贝壳咒语:

wget https://www.midiworld.com/mozart.htm
cat mozart.htm | grep -oh -E 'https(.*)\.mid"' | sed 's/"//' | xargs wget -c -t1
rm mozart.htm

嗯,我有点困惑。你想这样做吗:在页面上搜索指向
.mid
文件的链接,然后将它们下载到一个目录中?嗯,我有点困惑。您想这样做吗:在页面中搜索指向
.mid
文件的链接,然后将它们下载到目录中?谢谢,我会在早上测试一下,看它是否适合我。我可以问一下这样我将来会更好:为什么我的代码返回html?我想看看我哪里出了错。编辑:也许我在哪里设置data=r.text?我会进一步调查,以免再犯错误。我找到了问题的根源。它位于
下载\u文件
功能中的
r=requests.get(url,allow\u redirects=True)
行中,因为您使用
作为链接,文件名
,但在
请求中使用
url
。get
,它返回
get\u文件名
中声明的
url
。一个简单的变量搞乱了整个代码!只需将
请求中的
url
替换为
链接
。在你的代码中加入
,就可以了。我想打自己一巴掌。哈哈,谢谢。当我将脚本放在函数中时,我一定是从脚本顶部复制了一些代码,但忘了更改它。谢谢,我会在早上测试一下,看看它是否适合我。我可以问一下这样我将来会更好:为什么我的代码返回html?我想看看我哪里出了错。编辑:也许我在哪里设置data=r.text?我会进一步调查,以免再犯错误。我找到了问题的根源。它位于
下载\u文件
功能中的
r=requests.get(url,allow\u redirects=True)
行中,因为您使用
作为链接,文件名
,但在
请求中使用
url
。get
,它返回
get\u文件名
中声明的
url
。一个简单的变量搞乱了整个代码!只需将
请求中的
url
替换为
链接
。在你的代码中加入
,就可以了。我想打自己一巴掌。哈哈,谢谢。当我把脚本放在函数中时,我一定是从脚本顶部复制了一些代码,但忘了更改。科塔,你上过耶鲁吗?我相信我在研究生院时住在你的地板上。现在才注意到几个月前我的问题的答案。。。如果是你,科塔,你上过耶鲁吗?我相信我在研究生院就住在你家。现在才注意到几个月前我的问题的答案。。。如果是你。