美丽的汤与面向对象的编程

时间:2017-11-28 19:26:21

标签: python-3.x class beautifulsoup

我是Python的新手,正在开发我的第一个项目;挑战自己将OOP纳入其中。我已经在程序上预先编写了它并且工作正常,但是寻找最佳实践来将其重新编写为OOP。

我的问题:在课堂上调用美味汤是否更好,以便每个对象都是一个独立的实体,正如我在下面的唱片编辑功能中所做的那样? (我有多个课程,每个课程都会相应地调用Beautiful Soup)或者,在全球范围内调用它会更有意义吗?在这种情况下,我如何将所有必要的变量传递给每个类?

下面;我正在研究的一个示例类。输入一个乐队名称,并将带有URL的所有专辑的dict返回到专辑的维基百科页面。

import urllib.request
from bs4 import BeautifulSoup


class Band:

    def __init__(self, name):
        self.name = name

    def discography(self):
        url = 'https://en.wikipedia.org/wiki/Special:Search?search=%s_discography' % self.name
        page = urllib.request.urlopen(url)
        soup = BeautifulSoup(page, 'html.parser')
        table = soup.find('table', attrs={'class': 'wikitable plainrowheaders'})
        titles = table.findAll(attrs={'scope': 'row'})


        def getAlbumTitles(url):
            albumTitles = [title.text for title in titles]
            return albumTitles

        def getDiscogLinks(url):
            album_href = [row.findAll('a') for row in titles]
            clean_links = []

            for i in album_href:
                for href in i:
                    if href.parent.name == 'i':
                        clean_links.append('https://en.wikipedia.org' + href.get('href'))

            return clean_links

        return dict(zip(getAlbumTitles(url), getDiscogLinks(url)))

name = input('Enter a band name: ')
artist = Band(name)
print(artist.discography())

#beatles = Band('beatles')
#print(beatles.discography())

0 个答案:

没有答案