2017-02-14 14 views
1

all_pages関数を再帰的に呼び出すことによってウェブサイトのすべてのユニークなURLを取得しようとしていますが、この機能はウェブサイトのすべてのURLを提供していません。beautifulsoupを使用してウェブサイト全体をスクラップする方法

私がしたいのは、BeautifulSoupを使ってウェブサイトのすべてのユニークなURLを取得することです。また、あなたはいくつかの点で返す必要がある代わりにresponse.content

base_url = "http://www.readings.com.pk/" 
unique_urls=[] 

def all_pages(base_url,unique_urls=[]): 

    response = requests.get(base_url) 
    soup = BeautifulSoup(response.content, "html.parser") 

    for link in soup.find_all("a"): 
     url = link["href"] 
     absolute_url = urljoin(base_url, url) 
     if absolute_url not in unique_urls: 

      if base_url in absolute_url: 

       unique_urls.append(absolute_url) 
       print (absolute_url) 

       all_pages(absolute_url,unique_urls,book_urls) 





all_pages(base_url,unique_urls) 
+1

ようこそサイードを。私はあなたがイメージとしてあなたのコードを持っているのを見ます。テキストとして配置し、エディタで{}を使用してコードスニペットとしてマークすることを強くお勧めします。人々はあなたを助けることができるでしょう。 [質問する](http://stackoverflow.com/help/how-to-ask)をお読みください。 – micstr

答えて

1

使用response.text:私のコードは次のようになります。さらに、unique_urlsをリストにする代わりに、それをセットにすると、それらは常に一意になります。

はまた、あなたの方法は、再帰的であるとPythonは max recursion depthを持っているので、多分あなたの代わりにこれを行う必要があります。

base_url = "http://www.readings.com.pk/" 

def all_pages(base_url): 

    response = requests.get(base_url) 
    unique_urls = {base_url} 
    visited_urls = {} 
    while len(unique_urls) > len(visited_urls) 
     soup = BeautifulSoup(response.text, "html.parser") 

     for link in soup.find_all("a"): 
      try: 
       url = link["href"] 
      except: 
       continue 
      absolute_url = base_url + url 
      unique_urls.add(absolute_url) 

     unvisited_url = (unique_urls - visited_urls).pop() 
     unique_urls.add(unvisited_url) 
     visited_urls.add(unvisited_url) 
     response = requests.get(unvisited_url) 

    return unique_urls 

all_pages(base_url) 
関連する問題