정구리의 우주정복
Python 웹크롤링 (Web Crawling) 02. 네이버 이미지 검색결과 다운로드 프로그램 ([SSL: CERTIFICATE_VERIFY_FAILED] 오류해결) 본문
Python 웹크롤링 (Web Crawling) 02. 네이버 이미지 검색결과 다운로드 프로그램 ([SSL: CERTIFICATE_VERIFY_FAILED] 오류해결)
Jungry_ 2020. 3. 30. 00:39참고는 프로그래머 김플 스튜디오 유튜브
오늘은 네이버에다 검색어를 검색하면 이미지 검색결과를 자동으로 다운받는걸 만들어볼거다 !
과정 (내 생각임)
1. 검색부분 구현 및 html 불러오기
2. html 분석을 통해 이미지 찾기
3. 다운로드하기 (여기서부턴 모르니까 영상참조)
1. 검색부분 구현 및 html 불러오기
import urllib.request
from urllib import parse
from bs4 import BeautifulSoup
import ssl
context = ssl._create_unverified_context()
search = input("저장하고 싶은 사진의 검색어 입력 : ")
url = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
newUrl = url+parse.quote_plus(search)
html = urllib.request.urlopen(newUrl,context=context).read()
soup = BeautifulSoup(html,'html.parser')
저번에 했던걸 바탕으로 기본 틀을 먼저 만들었다 (이전 게시글에 자세하게 설명했음 ! )
2. html 분석을 통해 이미지 찾기
이제 html 을 분석해보자
<img> 태그 안에 이미지 정보가 담겨진걸 볼 수 있다
이미지들은 동일하게 class = "_img" 이다 이걸 이용할 수 있지 않을까 !
여기서부턴 영상 참고
3. 다운로드 하기
아까 네이버 검색창에선 <img src=" ..."
에 들어있던게 여기선 data-source="..." 안에 들어 있는걸 확인할 수 있다.
이유는 ?
-코드를 html 로만 짜는게 아니라 js를 이용해서 짜기 때문에 js 를 모두 거친 모습이 <img src="" 인거다
그래서 크롤링 할때는 출력을 해보면서 하는게 좋다고 합니다 :-)
우리에게 필요한건 data-source !
import urllib.request
from urllib import parse
from bs4 import BeautifulSoup
import ssl
context = ssl._create_unverified_context()
search = input("저장하고 싶은 사진의 검색어 입력 : ")
url = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
newUrl = url+parse.quote_plus(search)
html = urllib.request.urlopen(newUrl,context=context).read()
soup = BeautifulSoup(html,'html.parser')
img = soup.find_all(class_='_img')
for i in img :
print(i['data-source'])
print()
for 문에서 i['data-source'] 를 출력해보면 잘 가져와진걸 알수있다
이제 저장을 해야한다 사실 이부분이 꽃 아닐까
전체 코드 분석
import urllib.request
from urllib import parse
from urllib.request import urlopen
from bs4 import BeautifulSoup
import ssl
context = ssl._create_unverified_context()
search = input("저장하고 싶은 사진의 검색어 입력 : ")
url = 'https://search.naver.com/search.naver?where=image&sm=tab_jum&query='
newUrl = url+parse.quote_plus(search)
html = urllib.request.urlopen(newUrl,context=context).read()
soup = BeautifulSoup(html,'html.parser')
img = soup.find_all(class_='_img')
print("실행!")
n=1 #이름 저장할때 이름 뒤에 붙을거임
for i in img :
imgUrl=i['data-source']
with urlopen(imgUrl) as f: #imgUrl 을 open 해서 f 에 부른다
with open(search + str(n) +'.jpg','wb') as h :#어떤 이름으로 저장할까 #wb = write 와 이미지이기 때문에 바이너리의 b !!
img = f.read()
h.write(img)
n += 1
print("끝 !")
'일단 for 문 부터 살펴보자
imgUrl 에 이미지가 들어가있는 i[data-source] 를 넣어준다
with as 구문 : 구문이 끝나게 되면 파일을 자동으로 닫아준다 close() 를 할 필요가 없어짐 !
urlopen(imgUrl) 로 이미지를 오픈한걸 f 에 넣어준다
open() : 파일을 오픈하면서 이름을 정해준다 이름을 search(검색값) + n(몇번째인지) + .jpg 파일 확장자 , 'wb' 는 write 와
이미지 이기 때문에 바이너리를 불루와주는거다
이미지를 읽어주고 다시 write 해준다 !
만약 사진 저장 경로를 지정하고 싶으면 open('파일경로','파일이름','wb') 이렇게 해주면 됨
실행하면 내가 원하는 검색어의 네이버 이미지가 다운로드 된다 !!
만약 갯수를 지정해주고 싶으면 for문 안에 if n<=10 : 이런식으로 조건문을 넣어서 내가 원하는 갯수의 사진을 다운받자 !
실행시
<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
오류가 발생했을때 (mac에서 발생하는 경우가 있나보다)
finder->application(응용프로그램) -> python3.7(사용하는 버전) -> Install Certificates.command 실행
이렇게 하고나니까 해결이 되었다 !
나는 이제 사진도 저장할 줄 안다 !
'PYTHON > STUDY' 카테고리의 다른 글
Python 웹 크롤링 (Web Crawling) 05. CSV 파일 저장 방법 (0) | 2020.04.01 |
---|---|
Python 웹크롤링 (Web Crawling) 04. 네이버 검색 결과 여러 페이지 가져오기 (0) | 2020.03.31 |
Python 웹크롤링 (Web Crawling) 03. 인스타그램 사진 크롤링 'chromedriver' executable needs to be in PATH 오류 해결법 (0) | 2020.03.31 |
Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 만들기 (2) (2) | 2020.03.28 |
Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 만들기(1) (2) | 2020.03.28 |