■ 이미지 스크롤링을 하려면 필요한 내용 2가지
1. selenium 설치
conda install selenium
2. 크롬 드라이버 (크롬으로 스크롤링)
선생님이 주신 코드
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'D:\chromedriver/chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://search.naver.com/search.naver?where=image&sm=stb_nmr&")
elem = browser.find_element_by_id("nx_query")
#네이버 검색창 소스보면(검색창의 안쪽에다가 해야함)
#id="nx_query" 뜸.
#find_elements_by_class_name("")
# 검색어 입력
elem.send_keys("공유") #위에 nu_query 에 들어감
elem.submit() #얘가 엔터역할
# 반복할 횟수
for i in range(1,20):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
# end 는 우리 키보드의 엔드키. 엔드키 range로 19번 먹임.
time.sleep(10)
time.sleep(10)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
print(soup)
print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="_img")
for im in imgList:
params.append(im["src"])
return params
#print(fetch_list_url())
def fetch_detail_url():
params = fetch_list_url()
#print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "d:/naverImages/"+ str(a) + ".jpg" )
a=a+1
fetch_detail_url()
browser.quit()
문제394. 구글에서 이미지 검색하는 웹스크롤링 코드를 작성하시오
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'D:\chromedriver/chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://www.google.co.kr/imghp?hl=ko&tab=wi")
elem = browser.find_element_by_class_name("gLFyf")
#네이버 검색창 소스보면(검색창의 안쪽에다가 해야함)
#id="nx_query" 뜸.
#다른 사이트는 소스 찾아서 바꿔줘야 함.
#find_elements_by_class_name("")
# 검색어 입력
elem.send_keys("인간카누") #위에 nu_query 에 들어감
elem.submit() #얘가 엔터역할
# 반복할 횟수
for i in range(1,3): #20으로 하면 오래 걸리니까 내려줌
browser.find_element_by_xpath("//body").send_keys(Keys.END)
# end 는 우리 키보드의 엔드키. 엔드키 range로 19번 먹임.
time.sleep(5) #10초는 무쟈게 오래걸린다함
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
#print(soup)
print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="rg_ic rg_i")
for im in imgList:
try:
params.append(im["src"])
except KeyError:
params.append(im["data-src"]) #어떤건 data-src로 되어있다함
#data-src 를 폴더에 안담고 넘어가지 않고, 에러나서 멈추나봄.
return params
#print(fetch_list_url())
def fetch_detail_url():
params = fetch_list_url()
#print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "d:/naverImages/"+ str(a) + ".jpg" )
a=a+1
fetch_detail_url()
browser.quit()
-------------------------
선생님 답
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver # 웹 애플리케이션의 테스트를 자동화하기 위한 프레임 워크
from selenium.webdriver.common.keys import Keys
import time # 중간중간 sleep 을 걸어야 해서 time 모듈 import
########################### url 받아오기 ###########################
# 웹브라우져로 크롬을 사용할거라서 크롬 드라이버를 다운받아 위의 위치에 둔다
# 팬텀 js로 하면 백그라운드로 실행할 수 있음
binary = 'd:\chromedriver/chromedriver.exe'
# 브라우져를 인스턴스화
browser = webdriver.Chrome(binary)
# 네이버의 이미지 검색 url 받아옴(아무것도 안 쳤을때의 url)
browser.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ei=l1AdWbegOcra8QXvtr-4Cw&ved=0EKouCBUoAQ")
# 네이버의 이미지 검색에 해당하는 input 창의 id 가 'nx_query' 임(검색창에 해당하는 html코드를 찾아서 elem 사용하도록 설정)
# input창 찾는 방법은 원노트에 있음
# find_elements_by_class_name("") --> 클래스 이름으로 찾을때는 이렇게
elem = browser.find_element_by_name("q")
########################### 검색어 입력 ###########################
# elem 이 input 창과 연결되어 스스로 아이언맨을 검색
elem.send_keys("서브웨이 샌드위치")
# 웹에서의 submit 은 엔터의 역할을 함
elem.submit()
########################### 반복할 횟수 ###########################
# 스크롤을 내리려면 브라우져 이미지 검색결과 부분(바디부분)에 마우스 클릭 한번 하고 End키를 눌러야함
for i in range(1, 5):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
time.sleep(10) # END 키 누르고 내려가는데 시간이 걸려서 sleep 해줌
time.sleep(10) # 네트워크 느릴까봐 안정성 위해 sleep 해줌
html = browser.page_source # 크롬브라우져에서 현재 불러온 소스 가져옴
soup = BeautifulSoup(html, "html.parser") # html 코드를 검색할 수 있도록 설정
########################### 그림파일 저장 ###########################
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="rg_ic rg_i") # 네이버 이미지 url 이 있는 img 태그의 _img 클래스에 가서
for im in imgList:
try :
params.append(im["src"]) # params 리스트에 image url 을 담음
except KeyError:
params.append(im["data-src"])
return params
def fetch_detail_url():
params = fetch_list_url()
for idx,p in enumerate(params,1): #인덱스1번부터 시작하라는 것!!
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "D:/googleImages/" + str(idx) + ".jpg")
if __name__ == '__main__':
# 메인 실행 함수
fetch_detail_url()
# 끝나면 브라우져 닫기
browser.quit()
------------------------------------------
구글에서 사진 찾다보면
맨 하단에
사진더보기 가 나오는데
이걸 클릭하는 명령이 없다.
(end 키 엔터치는 명령만 있음)
그걸 수정보완하기 위한 준하 코드
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'C:\\Users\itwill\Desktop\chromedriver/chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://www.google.co.kr/imghp?hl=ko")
elem = browser.find_element_by_class_name("gLFyf") #검색창 id
# find_elements_by_class_name("")
# 검색어 입력
elem.send_keys("subway")
elem.submit()
# 반복할 횟수
for i in range(1 ,10):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
#모두의 코드와 동일한데 거기다 try,except 하나 추가했음
try:
browser.find_element_by_id("smb").click()
#smb는 결과더보기. 그걸 클릭!
#사진 뽑다보면
time.sleep(5)
except:
time.sleep(5)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html ,"html.parser")
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_ ="rg_ic rg_i")
for im in imgList:
try:
params.append(im["src"])
except KeyError:
params.append(im["data-src"])
return params
def fetch_detail_url():
params = fetch_list_url()
# print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "C:\\Users\itwill\Desktop\\naverImages/ "+ str(a) + ".jpg" )
a+=1
fetch_detail_url()
browser.quit()
문제395.
다음 이미지 검색에서 햄버거로 검색했을 때 나오는 이미지들을
D 드라이브 밑에 daumImages 라는 폴더에 저장되게 하시오
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'D:\chromedriver/chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=")
elem = browser.find_element_by_id("q")
#네이버 검색창 소스보면(검색창의 안쪽에다가 해야함)
#id="nx_query" 뜸.
#다른 사이트는 소스 찾아서 바꿔줘야 함.
#find_elements_by_class_name("")
# 검색어 입력
elem.send_keys("햄버거") #위에 nu_query 에 들어감
elem.submit() #얘가 엔터역할
# 반복할 횟수
for i in range(1,3):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
# end 는 우리 키보드의 엔드키. 엔드키 range로 19번 먹임.
time.sleep(5)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
#print(soup)
print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="thumb_img")
for im in imgList:
try:
params.append(im["src"])
except KeyError:
params.append(im["data-src"])
return params
#print(fetch_list_url())
def fetch_detail_url():
params = fetch_list_url()
#print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "d:/daumImages/"+ str(a) + ".jpg" )
a=a+1
fetch_detail_url()
browser.quit()
문제395.
Bing 에서 이미지 검색을 조회했을 때 나오는 이미지들을
d 드라이브 밑에 bing 폴더에 저장하시오
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'D:\chromedriver/chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://www.bing.com/?scope=images&FORM=Z9LH1")
elem = browser.find_element_by_id("sb_form_q")
#네이버 검색창 소스보면(검색창의 안쪽에다가 해야함)
#id="nx_query" 뜸.
#다른 사이트는 소스 찾아서 바꿔줘야 함.
#find_elements_by_class_name("")
# 검색어 입력
elem.send_keys("코카콜라") #위에 nu_query 에 들어감
elem.submit() #얘가 엔터역할
# 반복할 횟수
for i in range(1,3):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
# end 는 우리 키보드의 엔드키. 엔드키 range로 19번 먹임.
time.sleep(5)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
#print(soup)
print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="mimg")
for im in imgList:
try:
params.append(im["src"])
except KeyError:
params.append(im["data-src"])
return params
#print(fetch_list_url())
def fetch_detail_url():
params = fetch_list_url()
#print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "d:/daumImages/"+ str(a) + ".jpg" )
a=a+1
fetch_detail_url()
browser.quit()
--------------
다른사람답
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'd:\chromedriver/chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://www.bing.com/?scope=images&FORM=Z9LH1")
elem = browser.find_element_by_name("q")
#find_elements_by_class_name("")
# 검색어 입력
elem.send_keys("사막여우")
elem.submit() #검색버튼 실행/엔터
# 반복할 횟수
for i in range(1,5):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
try:
browser.find_element_by_id("smb").click() #결과 더보기 란 클릭 필요 없이 자동 넘어가는 기능
time.sleep(5)
except:
time.sleep(5)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
print(soup)
print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="mimg")
for im in imgList:
try:
params.append(im["src"])
except KeyError:
params.append(im["data-src"]) #중간 중간 src가 아닌 data-src인 이미지들이 있음
return params
def fetch_detail_url():
params = fetch_list_url()
#print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "d:/bing/"+ str(a) + ".jpg" )
a+=1
fetch_detail_url()
browser.quit()
■ 웹스크롤링
1. ebs 레이디버그 게시판
2. 한겨레 신문사
3. 중앙일보 신문사
4. 동아일보 신문사
5. 네이버 이미지 스크롤링
6. 구글 이미지 스크롤링
7. 다음 이미지 스크롤링
8. 빙 이미지 스크롤링
문제397.(오늘의 마지막 문제)
인스타그램에서 이미지를 다운로드 받는 웹스크롤링코드를 작성하시오
***나는 페이스북에서 로그인하는거 까지 해보겠다!!
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'D:\chromedriver/chromedriver.exe'
driver = webdriver.Chrome(binary)
driver.get("https://www.facebook.com/login.php?skip_api_login=1&api_key=124024574287414&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv1.0%2Fdialog%2Foauth%3Fredirect_uri%3Dhttps%253A%252F%252Fwww.instagram.com%252Faccounts%252Fsignup%252F%26state%3D%257B%2522fbLoginKey%2522%253A%25221eyxfnz13skl0m2et7ws1egfreq1pqnng71odx57ycmhzfky8zlb4%2522%252C%2522fbLoginReturnURL%2522%253A%2522%252Fexplore%252F%2522%257D%26scope%3Demail%26response_type%3Dcode%252Cgranted_scopes%26client_id%3D124024574287414%26ret%3Dlogin%26logger_id%3De57ef852-905b-f360-1163-cd36382758bd%26nonce%3DAXRGfRrj3dnAB7cX&cancel_url=https%3A%2F%2Fwww.instagram.com%2Faccounts%2Fsignup%2F%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%26state%3D%257B%2522fbLoginKey%2522%253A%25221eyxfnz13skl0m2et7ws1egfreq1pqnng71odx57ycmhzfky8zlb4%2522%252C%2522fbLoginReturnURL%2522%253A%2522%252Fexplore%252F%2522%257D%23_%3D_&display=page&locale=ko_KR&logger_id=e57ef852-905b-f360-1163-cd36382758bd&nonce=AXRGfRrj3dnAB7cX")
#그냥 링크일뿐 쫄지마셈
driver.find_element_by_name("email").clear()
driver.find_element_by_name("email").send_keys("아이디 또는 이메일")
driver.find_element_by_name("pass").clear()
driver.find_element_by_name("pass").send_keys("비밀번호")
driver.find_element_by_id("loginbutton").submit()
#driver.find_element_by_xpath("//span[@id='react-root']/div/article/div/div/div/form/span/button").click()
time.sleep(5)
# 검색어 입력
driver.get("https://www.instagram.com/explore/")
driver.find_element_by_css_selector("div._etslc").click()
elem = driver.find_element_by_css_selector("input._9x5sw._qy55y")
elem.clear()
elem.send_keys("포켓몬")
time.sleep(10)
elem.send_keys(Keys.ENTER)
time.sleep(10)
# 반복할 횟수
for i in range(1, 3):
driver.find_element_by_xpath("//body").send_keys(Keys.END)
time.sleep(5)
time.sleep(10)
html = driver.page_source
soup = BeautifulSoup(html, "lxml")
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="_icyx7")
for im in imgList:
params.append(im["src"])
return params
# print(params)
def fetch_detail_url():
params = fetch_list_url()
# print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "D:/naverImages/" + str(a) + ".jpg")
# download_web_images(p,'d:\');
a = a + 1
fetch_detail_url()
driver.quit()
------------------------
인스타그램에서 로그인은 안하고, 사진만 저장하는 코딩
# D:\instaImages
# https://www.instagram.com/jun2lov_sohyun/
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import sys
binary = 'D:\\chromedriver\chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://www.instagram.com/jun2lov_sohyun/")
# elem = browser.find_element_by_id("sb_form_q")
#find_elements_by_class_name("")
# 검색어 입력
# elem.send_keys("빙그레")
# elem.submit()
time.sleep(2)
# 반복할 횟수
for i in range(1,2):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
time.sleep(2)
# time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
print(soup)
print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="FFVAD")
for im in imgList:
try:
params.append(im["src"])
except:
print("case", im["data-src"])
params.append(im["data-src"])
return params
def fetch_detail_url():
params = fetch_list_url()
print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
# print(a)
urllib.request.urlretrieve(p, "d:/naverImages/"+ str(a) + ".jpg" )
a += 1
fetch_detail_url()
browser.quit()
sys.exit()
---------------------
클릭+인스타 검색_ 성호코드
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
binary = 'd:\chromedriver.exe'
browser = webdriver.Chrome(binary)
browser.get("https://www.instagram.com/instagram/")
time.sleep(5)
browser.find_element_by_class_name("TqC_a").click()
time.sleep(5)
browser.find_element_by_css_selector("input.XTCLo.x3qfX").clear()
browser.find_element_by_css_selector("input.XTCLo.x3qfX").send_keys('#에일리')
time.sleep(5)
browser.find_element_by_css_selector("input.XTCLo.x3qfX").send_keys(Keys.ENTER)
browser.find_element_by_css_selector("input.XTCLo.x3qfX").send_keys(Keys.ENTER)
time.sleep(5)
# 반복할 횟수
for i in range(1 ,3):
browser.find_element_by_xpath("//body").send_keys(Keys.END)
time.sleep(5)
time.sleep(5)
html = browser.page_source
soup = BeautifulSoup(html,"html.parser")
#print(soup)
#print(len(soup))
def fetch_list_url():
params = []
imgList = soup.find_all("img", class_="FFVAD")
for im in imgList:
params.append(im["src"])
return params
def fetch_detail_url():
params = fetch_list_url()
#print(params)
a = 1
for p in params:
# 다운받을 폴더경로 입력
urllib.request.urlretrieve(p, "d:/instagram_Images/"+ str(a) + ".jpg" )
a += 1
fetch_detail_url()
browser.quit()
'python' 카테고리의 다른 글
탐욕 알고리즘 (0) | 2019.03.26 |
---|---|
30-2. 웹크롤링[텍스트] (0) | 2019.03.26 |
30-1. 웹크롤링[텍스트] (0) | 2019.03.26 |
29. 시간(localtime, strftime, localtime, datetimenow) (0) | 2019.03.26 |
28. 이미지_바이너리(with~as, seek, ospathgetsize, osremove, osrename, oslistdir, globglob, osgetcwd, oschdir, osmkdir, osrmdir, shutilrmtree, ospathexists,ospathisfile) (0) | 2019.03.26 |