2017-01-07 7 views
0

私はbs4を使用していて、必要な単一のページのすべてのリンクを繰り返しています。私はそれらのリンクをリストに保存しました。私はリターンを使用しているとき、私は別の方法でURLを使用すると考えていたPythonがリストを返す

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() 

は、ここに私のコードですか? URLリストに追加されたすべてのリンクを使用できるようにしたいのですが、私が理解していないクラスを使用するときにこれを行うより良い方法はありますか?

答えて

0

これらは、インスタンスメソッドなので、あなたがそれらを呼び出すためにselfを使用する必要があります。例えば、あなたがscrape1()メソッドから返す必要はありませんし、インスタンスの属性を設定することができ、

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

そして:

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) 

そして、あなたにもurlsをこのように使用することができます:

scraper = MyScraper() 
scraper.scrape1() 

print(scraper.urls) 
+0

"use"メソッドを使用すると、空のリストが返されます。クラスインスタンスでURLを正しく定義するにはどうすればよいですか? – listen

+0

@listen HTMLに 'watch-now'クラスの' a'要素がないことがありますか? – alecxe

0

あなたはメソッドをURLのクラスの属性に戻すことができます。

self.urls = urls 

他の方法から参照できます。

自己とは何ですか?クラス全体で参照できる属性です。したがって、関数のパラメータとしてそれを与える必要なしに、関数内でself.urlsを使用できる別のメソッドを書くことができます。

関連する問題