我正在MacOS上使用Python3构建一个简单的程序,在一个变量中废弃艺术家的所有歌词。虽然我能够正确地遍历不同的URL(每个Url是来自这位艺术家的歌曲)并且具有我想要打印的输出,但我很难将所有不同的歌曲存储在一个变量中
我尝试过不同的方法,尝试将其存储在列表中的列表,字典,字典等中,但它没有成功。我还阅读了Beautifulsoup文档和几个论坛但没有成功。
我确信这应该是非常简单的事情。这是我正在运行的代码:
import requests
import re
from bs4 import BeautifulSoup
r = requests.get("http://www.metrolyrics.com/notorious-big-albums-list.html")
c = r.content
soup = BeautifulSoup(c, "html.parser")
albums = soup.find("div", {'class' : 'grid_8'})
for page in albums.find_all('a', href=True, alt=True):
d = {}
r = requests.get(a['href'])
c = r.content
soup = BeautifulSoup(c, "html.parser")
song = soup.find_all('p', {'class':'verse'})
title = soup.find_all('h1')
for item in title:
title = item.text.replace('Lyrics','')
print("\n",title.upper(),"\n")
for item in song:
song = item.text
print(song)
运行此代码时,您将获得我希望存储在单个变量中的确切输出。
我已经挣扎了好几天,所以我真的很感激一些帮助。
由于
答案 0 :(得分:0)
我做到了!!
我无法将输出存储在变量中,但我能够编写一个存储所有内容的txt文件,甚至更好。这是我使用的代码:
import requests
import re
from bs4 import BeautifulSoup
with open('nBIGsongs.txt', 'a') as f:
r = requests.get("http://www.metrolyrics.com/notorious-big-albums-list.html")
c = r.content
soup = BeautifulSoup(c, "html.parser")
albums = soup.find("div", {'class' : 'grid_8'})
for a in albums.find_all('a', href=True, alt=True):
r = requests.get(a['href'])
c = r.content
soup = BeautifulSoup(c, "html.parser")
song = soup.find_all('p', {'class':'verse'})
title = soup.find_all('h1')
for item in title:
title = item.text.replace('Lyrics','')
f.write("\n" + title.upper() + "\n")
for item in song:
f.write(item.text)
f.close()
我仍然希望听到是否有其他更好的方法。
谢谢!
答案 1 :(得分:0)
这是一个如何将数据存储在一个变量中的示例。 通过使用python字典,这可以是JSON或类似的。
a = dict()
#We create a instance of a dict. Same as a = {}.
a[1] = 'one'
#This is how a basic dictionary works. There is a key and a value.
a[2] = {'two':'the number 2'}
#Now our Key is normal, however, our value is another dictionary.
print(a)
#This is how we access the dict inside the dict.
print(a[2]['two'])
# first key [2] (gives us {'two':'the number 2'} we access value inside it [2]['two']")
您可以将此知识应用于您的算法。
将相册用作第一个键all['Stay strong'] = {'some-song':'text_heavy'}
我还建议您创建一个功能,因为您重复使用代码。
例如,请求然后使用bs4解析
def parser(url):
make_req = request.get(url).text #or .content
return BeautifulSoup(make_req, 'html.parser')
软件开发的一个好习惯是所谓的 DRY (不要重复自己),因为可读性很重要,而不是 WET (浪费每个人的时间,写一切都是两次)。
请记住一些事情。