用Python下载文件(带请求?)

2024-03-28 14:08:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是建立一个简单的爬虫来帮助我从终极吉他下载吉他标签。我可以给它一个乐队的网址,它将抓取链接的所有标签,列为'吉他专业'标签。在

典型的链接如下所示:

https://tabs.ultimate-guitar.com/a/agalloch/you_were_but_a_ghost_in_my_arms_guitar_pro.htm

使用此链接,我可以使用以下代码查找选项卡标识:

for tabid in tab.findAll("input", {"type" : "hidden", "name" : "id", "id" : "tab_id"}):
        tabID = tabid.get("value")

我要做的是用这个来建立一个链接到实际的下载。我遇到的问题就在这里。我能建立的最好的链接如下:

https://tabs.ultimate-guitar.com/tabs/download?id=904610

请注意,该URL末尾的id是我之前提到的tab_id。在

如果输入浏览器,此链接将立即导致下载。我遇到的问题是我找不到任何方法来生成依赖于实际文件名的链接。这个文件名应该类似于[song name here].gp5。其他可接受的文件类型可以是.gpx、.gp4和.gp3。在

我想做的是获取实际的文件名,这样我就可以正确地保存文件(如果下载的文件名被命名为垃圾,比如ID,这对我没有帮助,因为这对我来说是一个无用的文件名,我显然需要适当的扩展名)。有没有什么方法可以获取上面的链接并正确初始化下载,或者我可能在这个问题上运气不好?我没有足够的经验。当涉及到请求之类的问题时,我是相当无知的,所以也许可以通过这个URL提供一些内容并获得下载作为回报?在

注意:如果很难获得实际的文件名和扩展名,我确实有办法解决这个问题,但显然我至少需要适当的扩展名。在


Tags: 方法nameinhttpscomidurl链接
1条回答
网友
1楼 · 发布于 2024-03-28 14:08:34

文件名包含在响应的标头中。您可以用^{}解析这些头文件,并使用该文件保存文件:

>>> import requests
>>> r = requests.get('https://tabs.ultimate-guitar.com/tabs/download?id=904610')
>>> r.headers['Content-Disposition']
'attachment; filename="Agalloch - You Were But A Ghost In My Arms (Pro).gp5"'
>>> cgi.parse_header(r.headers['Content-Disposition'])[-1]['filename']
'Agalloch - You Were But A Ghost In My Arms (Pro).gp5'

完成下载的完整功能如下所示:

^{2}$

相关问题 更多 >