파이썬 - requests를 이용해서 네이버 검색어 자동으로 사진 다운 받기
본문 바로가기
파이썬(Python)/파이썬 개발

파이썬 - requests를 이용해서 네이버 검색어 자동으로 사진 다운 받기

by Squat Lee 2020. 12. 27.

크롤링을 해서 검색어를 입력하면 사진을 자동으로 다운로드 받는 코드를 작성해 보도록 하겠습니다.

 

인터넷을 검색해 보니 대부분 'urllib'모듈을 사용해서 사진을 다운로드 받는 예제는 많은데, 'requests'를 이용한 예제는 찾기 힘들더라구요. 

 

import requests

from bs4 import BeautifulSoup

import os

 

우선 필요한 모듈은 'requests', 'BeautifulSoup', 'os' 입니다.

 

path = r'C:\Users\passi\Desktop\images'

os.mkdir(path)

 

파일을 저장할 폴더 위치를 'path'라는 변수에 저장하고, 'os.mkdir(paht)'를 사용해서 폴더를 만듭니다.

 

네이버 검색창에서 '수박'을 이미지로 검색해 보면 아래와 같이 표시됩니다.

url = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='

 

위의 그림에서 주소란의 붉은색 박스 안의 내용만 복사해서 아래와 같이 붙여넣기 합니다.

 

search = input('검색어 입력>')

 

'search'라는 변수를 만들어서 검색어를 입력하면 저장이 될 수 있도록 합니다. 

 

res = requests.get(url+search)

 

'requests.get'을 이용해서 "기본주소(url) + 검색어(search)"  조합의 응답을 받아서 'res'라는 변수에 넣어줍니다.

 

'urllib' 모듈을 사용하시면 'search'값이 한글일때 별도로 인코딩을 해야 합니다. 하지만 'requests'같은 경우에는 별도 인코딩이 필요없습니다. 코드가 더 간단해 집니다.

 

soup = BeautifulSoup(res.content, 'html.parser')

 

'BeautifulSoup'을 사용해서 html 코드를 찾기 수월하게 변경한 후 'soup'이라는 변수에 넣어줍니다.

 

네이버 이미지 검색창에서 'F12'를 누르면 'html' 편집창이 위의 그림과 같이 나옵니다.

 

위의 그림 1번 부분을 눌러서 이미지에 마우스를 갖다대면 해당 태그가 표시됩니다. 해당 태그를 찾기 위해서 위의 그림에 표시된 "class="_img"를 이용하겠습니다.

 

imgs = soup.find_all(class_='_img')

 

'BeautifuSoup'에서 'find_all' 속성을 써서 클래스가 '_img'인 태그를 모두 'imgs'라는 변수에 list형태로 저장합니다.

 

= 1

for i in imgs:

 

'imgs'는 list 형태이기 때문에 for문을 써서 하나씩 필요한 부분을 빼내야 합니다. 

 

with requests.get(i['data-source']) as u:

 

일일이 닫기가 귀찮으니 'with' Block 을 사용하겠습니다. 'requests.get'으로 'i' 변수 중 ['data-source'] 만 호출하겠습니다. 그걸 간단하게 'u'라고 정합니다.

 

with open('C:\\Users\\passi\\Desktop\\images\\'+ str(n) + search + '.jpg''wb' ) as file:

 

 'open' 함수를 써서 파일을 만들어 줍니다. 여기서 모드는 이미지쓰기 이므로 'wb'로 지정하였습니다.

 

img = u.content

 

위에서 'requests.get'으로 가져온 응답값의 'content'를 'img'라는 변수에 넣습니다.

 

file.write(img)

 

위에서 만든 'file'에다가 검색어 응답값을 써줍니다.

 

print(i)

 

프린트문을 써서 실행상태를 확인합니다.

 

+= 1

print('완료 되었습니다.')

 

'n' 값을 하나씩 올려주고, 완료가 되면 프린트 구문이 나타나게 합니다.

 

전체 코드는 아래와 같습니다.↓

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import requests
from bs4 import BeautifulSoup
import os
 
path = r'C:\Users\passi\Desktop\images'
os.mkdir(path)
 
url = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
search = input('검색어 입력>')
res = requests.get(url+search)
soup = BeautifulSoup(res.content, 'html.parser')
 
imgs = soup.find_all(class_='_img')
 
= 1
for i in imgs:
    with requests.get(i['data-source']) as u:
        with open('C:\\Users\\passi\\Desktop\\images\\'+ str(n) + search + '.jpg''wb' ) as file:
            img = u.content
            file.write(img)
            print(i)
    n += 1
 
print('완료 되었습니다.')
cs

 

실행하면 아래와 같이 검색어를 입력하는 창이 나옵니다.

 

딸기라고 입력하고 엔터를 누르면 실행이 됩니다.

아래와 같이 바탕화면에 폴더가 만들어져서 그림이 다운로드 되었는 것을 확인할 수 있습니다.

728x90
반응형

댓글