2017-02-14 2 views
1

all_pages 함수를 재귀 적으로 호출하여 웹 사이트의 모든 고유 URL을 가져 오려고하지만이 함수는 웹 사이트의 모든 URL을 제공하지 않습니다.beautifulsoup를 사용하여 전체 웹 사이트 스크랩하는 방법

내가 원하는 것은 BeautifulSoup을 사용하여 웹 사이트의 모든 고유 URL을 얻는 것입니다. 내 코드는 다음과 같습니다 response.text 대신 또한 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

를 사용하여, 당신은 어떤 시점에서 반환해야합니다. 또한 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) 
관련 문제