2017-04-20 3 views
-1

저는 Python에 처음으로 익숙하며 이것이 제 첫 번째 실제 프로젝트입니다. 나는 웹 크롤러를 만들려고이 오류 여기UnboundLocalError : 할당 전에 로컬 변수 'soup'가 참조되었습니다.

import requests 
from bs4 import BeautifulSoup 


def main_spider(max_pages): 
    page = 1 
    while page < max_pages: 
     url = "https://en.wikipedia.org/wiki/Star_Wars" + str(page) 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text) 
    for link in soup.findAll("a"): 
     href = link.get("href") 
     print(href) 
    page += 1 

main_spider(1) 

무엇입니까하면 오류

for link in soup.findAll("a"): 
UnboundLocalError: local variable 'soup' referenced before assignment  
귀하의 경우에는
+0

게시 된 코드의 들여 쓰기를 수정할 수 있습니까? 'for' 루프가'while' 루프에없는 것처럼 보입니다. 'while'이 결코 참이 아닌 경우,'soup'는 절대로 할당되지 않고 오류가 발생합니다. 그러나 진짜 문제는 당신이 수프를 잠시 동안 가공하기를 원한다는 것입니다. – tdelaney

+0

'while page <+ max_pages :''+ ' – tdelaney

+0

코드가 위의 들여 쓰기가 필요 없습니다. 나는 수프를 잠시 동안 어떻게 처리하나요? 그것이 바보 같은 질문이라면 미안합니다. –

답변

0

UnboundLocalError은 사용하기 전에 로컬 변수가 할당되지 않은 코드 경로가 있음을 의미합니다. 이 경우 변수를 할당하는 루프가 while 루프 완료 후에 soup이 사용됩니다. 코드에서는 while 루프가 실행되지 않는 경우는 고려하지 않습니다.

그 밖의 버그가 있습니다. 먼저 for 루프는 들여 쓰기되어 while 내부에서 실행되도록해야합니다. 둘째, 외부 루프가 실행되지 않은 이유는 무엇입니까? 이는 단순히 조건부의 오타가있는 경우입니다. <+<=이어야합니다.

1
import requests 
from bs4 import BeautifulSoup 


def main_spider(max_pages): 
    page = 1 
    while page < max_pages: 
     url = "https://en.wikipedia.org/wiki/Star_Wars" + str(page) 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text) 
     for link in soup.findAll("a"): 
      href = link.get("href") 
      print(href) 
    page += 1 

main_spider(1) 

, soup는 while 루프의 지역 범위가에게, 당신은 할 수 있습니다 잠시 동안 만 액세스하십시오.

하나의 페이지에서 스프를하고 (while 루프를 사용하여 페이지 간을 이동하는 것처럼 보입니다), 나는 당신의 soup.findAll('a')이 while 루프 (AKA for a page basis)에있게되기를 바랍니다.

관련 문제