2017-02-14 22 views
1

我試圖通過遞歸調用all_pages函數來獲取網站的所有獨特url,但是這個函數並沒有給出網站的所有url。如何使用beautifulsoup來取消整個網站

我想要做的就是使用BeautifulSoup獲取網站的所有獨特的網址。我的代碼如下所示:

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代替response.content

另外,你需要在某個時候返回。此外,而不是使unique_urls列表,使其成爲一個集合,他們將永遠是唯一的。

此外,你的方法是遞歸的蟒蛇有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) 
相關問題