저번 코드에서 21번째 페이지까지 간 뒤에 다시 11번째 페이지로 돌아가는 문제점이 있었다.

모두의 레시피 사이트의 검색 URL이 끝에 한자리씩만 1씩 증가된다는 점을 생각해 반복문으로 해당 값을 1씩 증가시켜 URL을 이동하고 크롤링 한 뒤, 사이트를 종료하고 다시 1 증가한 새로운 URL을 띄우는 방식으로 문제를 해결했다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
food_list = ['김치찌개', '떡볶이']
 
for name in food_list:# 반복문을 사용해 음식 종류 list안에 있는 음식별로 크롤링 할 수 있도록 설정
    
    n = 1 # 크롤링 결과 사진에 숫자를 하나씩 증가시키기 위한 변수
    
    # list에서 받아온 값을 넣은 url 생성
    base_url = 'https://www.10000recipe.com/recipe/list.html?q={}&order=reco&page={}' 
    
    for page in range(1, 100):
        try:
            url = base_url.format(name, page)
            driver = webdriver.Chrome(ChromeDriverManager().install()) # 구글 크롤링에 사용하기 위한 코드 (크롬 브라우저를 사용할 것임)
            driver.get(url) # url 변수를 크롬으로 열 수 있도록
    
            html = driver.page_source # 페이지의 elements 전부 가져오기
            soup = BeautifulSoup(html) # BeautifulSoup 사용
            
            images = soup.findAll("a", {"class" : "common_sp_link"}) #  이미지 클래스의 값을 불러옴
    
            if not images: # 빈 리스트인 경우
                raise ex
                
            imgurl = [] # 이미지 url을 저장하기 위한 변수
 
            for i in images:
                temp = i.img['src'] 
                
                if temp.endswith('png') is False: # png형식의 파일은 저장하지 않는다. 
                    imgurl.append(i.img['src']) # 이미지의 source 주소를 가져와 imgurl list에 추가한다                  
                    
            for i in imgurl:
                urlretrieve(i, "음식 사진/" + name + str(n) + ".jpg") # 크롤링한 사진에 1씩 값을 증가해 저장한다
                n += 1
            
            print(str(page) + "번째 페이지 크롤링 중...")
            driver.quit()
            
        except Exception as ex: # 이미지가 없는 경우 종료
            print(name + " 크롤링 완료")
            driver.quit()
            break
cs

 

24번째 페이지까지 있다고 가정하는 경우 예외처리를 해주지 않으면 25번째, 26번째… 100번째까지 이미지가 존재하지 않는 URL을 계속 탐색하기 때문에 예외처리를 통해 이미지가 없는 URL이 나오면(페이지가 더 없으면) 반복문을 종료하고 다음 요리를 크롤링하도록 했다.

 

차후 과제

Requests 라이브러리를 사용해서 크롤링 할 수 있다고 하는데, Requests를 사용한 것과 Selenium을 사용한 것의 속도를 비교해 어떤 것이 더 좋은지 확인해 볼 예정이다.

+ Recent posts