如何使用Beautifulsoup在一个变量中存储不同的文本集

时间:2018-02-24 11:17:15

标签: python python-3.x beautifulsoup

我正在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)

运行此代码时,您将获得我希望存储在单个变量中的确切输出。

我已经挣扎了好几天,所以我真的很感激一些帮助。

由于

2 个答案:

答案 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 (浪费每个人的时间,写一切都是两次)。

请记住一些事情。