首页 > 解决方案 > 如何使用python解析苹果音乐

问题描述

def getLinks():
# Getting links
url = f"https://music.apple.com/ua/playlist/techno-essentials/pl.de1ac365ed3549698bcd6e099db5171d"
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# applelinks = soup.find_all('meta', attrs = {"property":"music:song"})[0].get("content") #works but only with one link
# file.write(applelinks)
applelinks = soup.find_all('meta', attrs = {"property":"music:song"})
for link in enumerate(applelinks):
    file.write(link.get("content"))  #Objects has no attribute "get"
return
getLinks()

我正在使用 Beautiful Soup 和 Requests 库。如何获取所有链接?

标签: pythonparsing

解决方案


AttributeError: 'tuple' object has no attribute 'get'

这里的问题是变量link是没有属性的元组get。以及为什么它是tuple因为enumeratefor loop.

enumerate(applelinks)

这将返回一个enumerate object可以迭代的。并且每次在for loop它都会返回一个类似下面tuple的内容。index

#input
for link in enumerate(applelinks):
   print(link)
#output
'index' 'applelinks object member'
 V        V
(0, <meta content="<link for the song>" property="music:song"/>)
(1, <meta content="<link for the song>" property="music:song"/>)
...

当您index在迭代时需要对象的成员时,基本上会使用它。如下图,

#input
for index, link in enumerate(applelinks):
    print(f'index of element: {index} | link: {link}')
#output
index of the element: 0 | link : <meta content="link for the song" property="music:song"/>
index of the element: 1 | link : <meta content="link for the song" property="music:song"/>
...

由于index这里不需要,我们可以放弃enumerate对对象的使用和迭代applelinks

#input
for link in applelinks:
    print(link.get("content"))
#output
song link
song link
...

注意:歌曲的链接正在编辑,因为它们不是解释所必需的。


推荐阅读