python crawling - 이미지 크롤링

BANG·2020년 11월 28일
2

Crawling

목록 보기
1/3

필요한 패키지

  • dload : URL로부터 파일 다운로드를 해주는 패키지
  • selenium : 브라우저를 제어
  • beautifulsoup4 : HTML/XML문자열에서 원하는 태그정보를 가져옴

dload

import dload
 
dload.save("https://spartacodingclub.kr/static/css/images/ogimage.png", 'sparta.png')
# 위 내용은 해당 url의 이미지를 sparta.png 파일로 저장하라는 의미

selenium

크롬 브라우저를 열어 Settings > About Chrome에서 버전 확인

크롬 버전에 알맞게 다운로드
다운로드하고 해당 파일을 .py가 있는 위치에 이동한 후, 압축풀기

from selenium import webdriver
driver = webdriver.Chrome('chromedriver')
 
driver.get("http://www.naver.com")
 
# 크롬으로 네이버가 켜짐

bs4(beautifulsoup4)

  • 파이참의 file → setting → project interpreter 에서 bs4를 검색 및 다운로드

태그 안의 텍스트를 찍고 싶을 땐 → 태그.text 태그 안의 속성을 찍고 싶을 땐 → 태그'속성'

from bs4 import BeautifulSoup
from selenium import webdriver
import time
 
driver = webdriver.Chrome('chromedriver')
driver.get("https://search.daum.net/search?nil_suggest=sugsch&w=img&DA=GIQ&sq=%EB%B0%A9&o=1&sugo=15&q=%EB%B0%A9%ED%83%84%EC%86%8C%EB%85%84%EB%8B%A8")
time.sleep(5)
 
req = driver.page_source     # 해당 url에서 가져온 모든 정보를 req에 저장
soup = BeautifulSoup(req, 'html.parser')    # 내가 필요한 부분만 가져옴
 
print(soup)
 
driver.quit()

  • beautifulsoup 내 select에 미리 정의된 다른 방법
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
 
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
 
# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
 
# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

from bs4 import BeautifulSoup
from selenium import webdriver
import time
 
driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0")    # 이미지들을 가져올 url
time.sleep(5) # 5초 동안 페이지 로딩 기다리기
 
req = driver.page_source
 
soup = BeautifulSoup(req, 'html.parser')
 
thumbnails = soup.select_one('#imgList > div:nth-child(4) > a > img')['src']    # 하나의 (img)이미지의 태그 정보 중 src만 가져옴
print(thumbnails)
# 크롬에서 가져오고 싶은 이미지 오른쪽 클릭
# 검사 -> 개발자 도구에서의 선택된 부분을 오린쪽 클릭
# copy -> copy selector 를 하여 복사된 정보
 
driver.quit() # 끝나면 닫아주기

import dload
from bs4 import BeautifulSoup
from selenium import webdriver
import time
 
driver = webdriver.Chrome('chromedriver') # 웹드라이버 파일의 경로
driver.get("https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EC%95%84%EC%9D%B4%EC%9C%A0")    # 이미지들을 가져올 url
time.sleep(5) # 5초 동안 페이지 로딩 기다리기
 
req = driver.page_source
 
soup = BeautifulSoup(req, 'html.parser')
 
thumbnails = soup.select("#imgList > div > a > img")
# 크롬에서 가져오고 싶은 이미지 오른쪽 클릭
# 검사 -> 개발자 도구에서의 선택된 부분을 오린쪽 클릭
# copy -> copy selector 를 하여 복사된 정보에서 중복을 삭제
 
i=1
for thumbnail in thumbnails:    # 해당 페이지의 이미지들의 태그들을 모두 가져옴
    src = thumbnail["src"]    # 가져온 태그 정보중에 src만 가져옴
    dload.save(src, f'imgs/{i}.jpg')    # 설정한 경로로 jpg파일로 다운로드
    i += 1
 
driver.quit() # 끝나면 닫아주기
profile
Record Everything!!

0개의 댓글