Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- python
- 과천 맛집
- 주피터
- 양재 맛집
- 남한산성 사찰
- 과천 한식
- Tabpy
- 신병훈련소
- 태블로
- 조리원
- 태블로 신병훈련소
- 양재 회식
- 을지로3가
- 취준일기
- 한전아트센터 웨딩홀
- 조리원생활
- 조리원이야기
- 용인 사찰
- 신병훈련소 태블로
- 7월 일기
- 일기
- 칼국수 맛집
- 텍스트크롤링
- 용인 절
- 칼국수 어디로
- pip install
- 태블로 탭파이
- vscode
- Selenium
- 크롤링
Archives
- Today
- Total
김빵디
python+selenium 네이버 이미지 크롤링(여러장 다운받기) 본문
728x90
네이버에 있는 이미지를 크롤링해봅시다!
1. 뽀삐 입력
2. 옵션 버튼 클릭
3. 상업적인 용도 사용가능 체크
결과로 나온 이미지들을 총 10장을 다운로드 시도해볼것
from ssl import Options
from tkinter import BROWSE
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from urllib.request import urlopen
import time
import os
#from sniffio import current_async_library_cvar
driver=webdriver.Chrome()
url='https://www.naver.com'
driver.get(url)
time.sleep(3)
#네이버 검색
#gogle = driver.find_element_by_css_selector('.gLFyf.gsfi')
#gogle.send_keys("네이버")
#gogle.send_keys(Keys.ENTER)
#time.sleep(3)
#네이버 열기
#nav = driver.find_element_by_xpath('//*[@id="rso"]/div[1]/div/div/div/div/div/div[1]/a/h3')
#nav.click()
navSe = driver.find_element_by_xpath('//*[@id="query"]')
navSe.send_keys("뽀삐")
navSe.click()
navSe.send_keys(Keys.ENTER)
time.sleep(3)
#뽀삐 검색 후 네이버 view 클릭
nav_view = driver.find_element_by_xpath('//*[@id="lnb"]/div[1]/div/ul/li[3]/a')
nav_view.click()
time.sleep(3)
#네이버_view 검색한 단어 '뽀삐' 게시물 제목텍스트 크롤링
#ele = driver.find_elements_by_css_selector('.api_txt_lines.total_tit._cross_trigger')
#for i in ele:
# title = i.text
# print(title)
# time.sleep(3)
#네이버 이미지 열기(탭/옵션/상업이용)
nav_img = driver.find_element_by_xpath('//*[@id="lnb"]/div[1]/div/ul/li[2]/a')
nav_img.click()
time.sleep(3)
nav_img_op = driver.find_element_by_xpath('//*[@id="snb"]/div[1]/div/div[3]/a')
nav_img_op.click()
time.sleep(3)
nav_img_op_ok = driver.find_element_by_xpath('//*[@id="snb"]/div[2]/ul/li[5]/div/div/a[3]')
nav_img_op_ok.click()
time.sleep(3)
#이미지 크롤링
img_list=[]
before_src=""
count=0
img_list = driver.find_elements_by_css_selector('._image._listImage')
#폴더가없는경우 소스코드 경로에있는 곳에 파일 생성
#C:\Users\20202003\AppData\Local\Programs\Python\Python310\venv\img
if not os.path.exists('img'):
os.mkdir('img')
for index, img in enumerate(img_list[0:]):
img.click()
time.sleep(2)
img_url = driver.find_element_by_xpath('//*[@id="main_pack"]/section[2]/div/div[2]/div/div/div[1]/div[1]/div/div/div[1]/div[1]/img')
curr_src = img_url.get_attribute('src')
if before_src == curr_src:
continue
elif before_src != curr_src:
t = urlopen(curr_src).read()
if index < 10:
count_str = str(count)
file_name = 'photo_' + count_str + '.jpg'
file= open(os.path.join('img', file_name), "wb")
file.write(t)
count+=1
before_src = curr_src
curr_src = ""
print('save' + count_str)
else:
print('end')
driver.close()
break

우선 전에 구글 -> 네이버로 간 코드들을 # 주석처리해주고 시작했다 (계속 돌려보면서 시간단축하기위해..)
암튼, 위 사진 출력된것처럼 검색후에 하나씩 클릭해서 다양한 사진을 출력되지않아서 애를 많이먹었다
삽질이란 삽질은 다한듯..TT
문제점 : 계속 같은 photo_0.jpg와 같은 사진이 10장 출력되었음..
해결방법
1. 코드 하나씩 뜯어서 보면 하나씩 클릭까지는 완벽한데 엘리먼트의 img src를 못불러오는것 같았다...
print로 찍어서 src가 출력되는지 확인해보니 역시나.... 같은 src만 계속 반복되는것..!
2. 그럼 어떻게 해야할까 고민하다가 해당 엘리먼트를 못찾는것같아서 xpath를 이용해서 위치를 잡아주었다!!(유레카)
xpath를 정확히 이렇게 쓰는구나 라고 배웠다..
728x90