Python Web Crawling (파이썬 크롤링) :: 네이버 웹툰 이미지 크롤링하기

업데이트:

View On GitHub Open In Binder Open In Colab


Naver Webtoon Crawling

⭐ 파이썬으로 네이버 웹툰 이미지 크롤링하기

😃 우측 상단의 아이콘을 누르시면 직접 실습해보실 수 있습니다 :)

colab 실습 화면

✔ 10개 회차 크롤링

Python Web Crawling에 필요한 라이브러리를 설치하고 Import한다.

  • 필요한 Python 패키지 설치

      pip install requests bs4 pytest-shutil bboxes cvlib
    
# Import

from bs4 import BeautifulSoup
import requests
import os

웹툰 페이지의 html 소스를 가져온 후, wrt_nm class의 parent tag의 text를 webtoonName array에 저장한다.

F12를 누르면 개발자모드에 진입하실 수 있습니다😊

# Webtoon Url : ex) 바른연애길잡이 
url = "https://comic.naver.com/webtoon/list.nhn?titleId=703852&page=1" 

# 크롤링 우회
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
html = requests.get(url, headers = headers)
result = BeautifulSoup(html.content, "html.parser")

webtoonName = result.find("span", {"class", "wrt_nm"}).parent.get_text().strip().split('\n')
# webtoonName = ['바른연애 길잡이', '\t\t\t\t\t\t\t남수']

현재 directory의 하위 폴더에 이미지를 저장할 folder를 만든다.

cwd = os.getcwd()
files = os.listdir(cwd)
# 현재 directory 위치
print(cwd, end='\n\n')

# 크롤링한 이미지를 저장할 폴더를 만듦
if os.path.isdir(os.path.join(cwd,  webtoonName[0])) == False: 
    os.mkdir(webtoonName[0])
   
print(webtoonName[0] + " folder created successfully!")
os.chdir(os.path.join(cwd,  webtoonName[0])) 
/home/jihye/Home/blog/_posts/ipynb_folder

바른연애 길잡이 folder created successfully!

title class의 td tag 찾은 후, 최근 10회차에 대한 웹툰 이미지를 크롤링한다.

title = result.findAll("td", {"class", "title"})

for t in title:
    
    # 회차별로 directory를 만든 후 해당 directory로 이동
    os.mkdir((t.text).strip()) 
    os.chdir(os.getcwd() + "//" + (t.text).strip()) 

    # 각 회차별 html 소스 가져오기
    url ="https://comic.naver.com" + t.a['href']
    html2 = requests.get(url, headers = headers) 
    result2 = BeautifulSoup(html2.content, "html.parser") 

    # webtoon image 가져오기
    webtoonImg = result2.find("div", {"class", "wt_viewer"}).findAll("img")
    num = 1 #image_name
    
    for i in webtoonImg:
        saveName = os.getcwd() + "//" + str(num) + ".jpg"
        with open(saveName, "wb") as file:
            src = requests.get(i['src'], headers = headers) 
            file.write(src.content) #
        num += 1

    os.chdir("..")

    # 한 회차 이미지 저장 완료!
    print((t.text).strip() + "   saved completely!") 
149   saved completely!
148   saved completely!
147   saved completely!
146   saved completely!
145   saved completely!
144   saved completely!
143   saved completely!
142   saved completely!
141   saved completely!
140   saved completely!

  • 크롤링 결과

✔ 전체 회차 크롤링

위의 주피터 노트북을 활용하면 10개의 회차에 대해 크롤링할 수 있다. 이번에는 웹툰의 더 많은 회차에 대해 크롤링 해본다.

from bs4 import BeautifulSoup
import requests
import os

# 크롤링하고 싶은 페이지의 개수
page_num = 18

for i in range(page_num):

    # Webtoon Url : ex) 바른연애길잡이 
    url = "https://comic.naver.com/webtoon/list.nhn?titleId=703846&page={0}".format(i) 

    # 크롤링 우회
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
    html = requests.get(url, headers = headers)
    result = BeautifulSoup(html.content, "html.parser")

    webtoonName = result.find("span", {"class", "wrt_nm"}).parent.get_text().strip().split('\n')

    cwd = os.getcwd()
    files = os.listdir(cwd)
    print(cwd)

    if os.path.isdir(os.path.join(cwd,  webtoonName[0])) == False: 
        os.mkdir(webtoonName[0])
    

    print(webtoonName[0] + "page {0} folder created successfully!".format(i))
    os.chdir(os.path.join(cwd,  webtoonName[0])) 
    
    title = result.findAll("td", {"class", "title"})

    for t in title:
        
        #웹툰 디렉토리 안에 회차별로 디렉토리 만들기
        if os.path.isdir(os.path.join(cwd,  webtoonName[0], (t.text).strip())): 
            break
        
        os.mkdir((t.text).strip()) 

        #회차별 디렉토리로 이동
        os.chdir(os.getcwd() + "//" + (t.text).strip()) 
        print(os.getcwd())
        #각 회차별 url
        url ="https://comic.naver.com" + t.a['href']
        #헤더 우회해서 링크 가져오기
        html2 = requests.get(url, headers = headers) 
        result2 = BeautifulSoup(html2.content, "html.parser") 

        # webtoon image 찾기
        webtoonImg = result2.find("div", {"class", "wt_viewer"}).findAll("img")
        num = 1 #image_name
        
        for i in webtoonImg:
            saveName = os.getcwd() + "//" + str(num) + ".jpg"
            with open(saveName, "wb") as file:
                src = requests.get(i['src'], headers = headers) 
                file.write(src.content) #
            num += 1

        os.chdir("..")

        # 한 회차 이미지 저장 완료!
        print((t.text).strip() + "   saved completely!") 
        
    os.chdir("..")

크롤링 성공 !!

댓글남기기