2017-01-07 6 views
0

Ich benutze bs4 und durchläuft alle Links auf einer einzigen Seite, die ich brauche. Ich habe diese Links dann in einer Liste gespeichert.Python gibt eine Liste zurück

Hier ist mein Code:

def scrape1(self): 

    html = self.browser.page_source 
    soup = BeautifulSoup(html, 'html.parser') 
    # add links to list for later use 
    urls = [] 
    for videos in soup.find_all('a', {'class': 'watch-now'}): 
     links = videos['href'] 
     urls.append(links) 

    return urls 

def use(self): 

    urls = scrape1() 

Ich dachte, wenn Rückkehr mit mir die URLs in einem anderen Verfahren verwenden könnte? Ich möchte in der Lage sein, jeden Link, den ich an die URL-Liste angehängt habe, zu verwenden, ist das eine bessere Möglichkeit, dies zu tun, wenn ich Klassen verwende, die ich nicht verstehe?

Antwort

0

Da diese die Instanzmethoden sind, sollten Sie mit self sein, sie zu nennen:

def use(self): 
    urls = self.scrape1() 

Und Sie nicht von der scrape1() Methode zurückkehren und eine Instanz Attribut gesetzt, zB:

class MyScraper(): 
    # ... 

    def scrape1(self): 
     html = self.browser.page_source 
     soup = BeautifulSoup(html, 'html.parser') 

     self.urls = [a['href'] for a in soup.select('a.watch-now')] 

    def use(self): 
     self.scrape1() 

     # use self.urls 
     print(self.urls) 

Und sehen Sie die urls auf diese Weise auch nutzen können:

scraper = MyScraper() 
scraper.scrape1() 

print(scraper.urls) 
+0

Es gibt eine leere Liste zurück, wenn die "Use" -Methode verwendet wird. Wie würde ich URLs in der Klasseninstanz korrekt definieren? – listen

+0

@listen könnte es sein, dass es im HTML keine 'a' Elemente mit' watch-now' Klasse gibt? – alecxe

0

Sie könnten einfach die Methode die URLs in ein Attribut der Klasse zurückgeben lassen.

self.urls = urls 

dann könnten Sie das von anderen Methoden beziehen.

alles mit sich selbst. sind Attribute, auf die Sie in der Klasse verweisen können. Sie könnten also eine andere Methode schreiben, die (ohne sie als Parameter für die Funktion zu verwenden) in der Funktion self.urls verwenden könnte.

Verwandte Themen