언어/python
웹툰 이미지 크롤링하기
STUFIT
2020. 11. 25. 13:47
반응형
다음 두가지를 이용하여 네이버에 있는 웹툰의 이미지를 크롤링해보자
- requests
- BeautifulSoup
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
|
import requests
import os
from bs4 import BeautifulSoup
#&no=15는 15화를 의미함
main_url = 'https://comic.naver.com/webtoon/detail.nhn?titleId=389848&no=1&weekday=wed'
res = requests.get(main_url)
print(res.status_code)
if res.ok:
html = res.text
soup = BeautifulSoup(html,'html.parser')
#jpg 파일 몇개인지 확인
# print(len(soup.select("img[src$='jpg']")))
img_url_list =[]
# $표시는 ~jpg로 끝나는 걸 의미
for img_url in soup.select("img[src$='.jpg']"):
# print(img_url)
img_url_list.append(img_url['src'])
img_url_list
|
cs |
if res.ok: 구문을 두어 res가 문제가 없으면 main_url의 주소에서 이미지를 가져온다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# img 디렉토리를 생성
# img 디렉토리가 없으면 생성하라는 명령
if not os.path.isdir('navercomic'):
os.mkdir('navercomic')
# img_url_list에 있는 url을 요청해서 image를 다운로드
for idx,img_url in enumerate(img_url_list,1):
print(f'--->다운로드 번호{idx}')
req_header={
'referer': main_url
}
res = requests.get(img_url, headers = req_header)
# print(res.ok)
if res.ok:
img_data = res.content
file_name = os.path.basename(img_url)
with open('navercomic/'+file_name,'wb')as file:
print(f'파일명 : {file_name} ({len(img_data)})bytes')
file.write(img_data)
|
cs |
위에서 가져온 이미지들을 if not os.path.isdir("만들고싶은 폴더명")에 넣어주도록 한다.
for 구문에서는 가져오는 이미지들에 인덱스를 두어 1번,2번,3번 이미지... 으로 파일 이름을 주어 다운로드를 받는다.
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
43
|
def comicbook(만화제목,회차):
# for no in range(1,15):
#no=no
main_url = f'https://comic.naver.com/webtoon/detail.nhn?titleId=389848&no={회차}&weekday=wed'
# print(main_url)
res = requests.get(main_url)
# print(res.status_code)
if res.ok:
html = res.text
soup = BeautifulSoup(html,'html.parser')
print(len(soup.select("img[src$='jpg']")))
img_url_list =[]
for img_url in soup.select("img[src$='jpg']"):
print(img_url['src'])
img_url_list.append(img_url['src'])
if not os.path.isdir(f'{만화제목}{회차}'):
os.mkdir(f'{만화제목}{회차}')
# img_url_list에 있는 url을 요청해서 image를 다운로드
for idx,img_url in enumerate(img_url_list,1):
print(f'--->다운로드 번호{idx}')
req_header={
'referer': main_url
}
res = requests.get(img_url, headers = req_header)
# print(res.ok)
if res.ok:
img_data = res.content
file_name = os.path.basename(img_url)
with open(f'{만화제목}{회차}/'+file_name,'wb')as file:
print(f'파일명 : {file_name} ({len(img_data)})bytes')
file.write(img_data)
for a in range(1,5):
print(a)
comicbook('헬퍼',a)
|
cs |
위에서 사용했던 2개의 코딩을 함수(def)로 묶어서 내가 원하는 만화 사이트를 1화부터 원하는 회차까지 한 폴더에 넣을 수 있도록 한다.
반응형