웹 스크래핑(크롤링)이란?
→ 웹 페이지에서 원하는 부분의 데이터를 수집해오는 것.
브라우저 제어
→ selenium 패키지를 이용하여 브라우저를 제어할 수 있다.
→ URL을 넣으면 바로 그 사이트를 열어준다.
1. selenium 패키지 설치 → 아까와 같은 방법 이용.
2. selenium을 사용하기 위해서는 웹 드라이버라는 파일도 필요하다.
· selenium webdriver 설치 링크
https://chromedriver.storage.googleapis.com/index.html?path=85.0.4183.87/
→ 이 링크에서 운영체제에 맞는 파일을 찾아 다운로드 받고, 압축을 풀어 python으로 옮기자.
3. selenium 시작코드
from selenium import webdriver
driver = webdriver.Chrome('chromedriver')
driver.get("http://www.naver.com")
→ 코드를 실행하면 naver 창이 열린다.
웹 스크래핑(크롤링)해보기
'고양이'를 검색해 이미지를 스크래핑!
1. 이미지를 스크래핑해올 주소(Daum)
https://search.daum.net/search?w=img&nil_search=btn&DA=NTB&enc=utf8&q=%EA%B3%A0%EC%96%91%EC%9D%B4
2. 패키지 추가 설치(beautifulsoup4)
→ beautifulsoup : 브라우저가 보고 있는 것 중에서 내가 원하는 것을 솎아내는 작업을 해준다.
☞ python interpreter에서 bs4를 검색하여 다운!
3. 크롤링 기본 세팅
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=%EA%B3%A0%EC%96%91%EC%9D%B4")
time.sleep(5) #5초 동안 페이지 로딩 기다리기
req = driver.page_source
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(req, 'html.parser')
###################################
# 코드 작성 부분
###################################
driver.quit() #끝나면 닫아주기
4. select / select_one 사용
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')
soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
# 태그 안의 텍스트를 찍고 싶을 때
soup.select('태그.text')
# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')
# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')
-
이미지를 가져올 주소로 이동 → 원하는 부분에서 마우스 오른쪽 클릭! → 검사
→ 원하는 태그에서 마우스 오른쪽 클릭! → Copy → Copy selector
- 다음과 같은 태그가 복사된다.
#첫번째 이미지
imgList > div:nth-child(1) > a > img
#두번째 이미지
imgList > div:nth-child(2) > a > img
→ div:nth-child(n) ⇒ 이 부분만 다르다는 것을 알 수 있음.
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=%EA%B3%A0%EC%96%91%EC%9D%B4")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')
thumbnails = soup.select("#imgList > div > a > img")
for thumb in thumbnails:
src = thumb["src"]
print(src)
driver.quit() # 끝나면 닫아주기
→ 코드를 실행하면 이미지의 url이 출력된다.
5. 이미지 저장하기
- 처음에 설치했던 dload 패키지를 이용하여 이미지를 다운로드한다.
- 이미지를 저장할 폴더를 만든다(imgs)
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=%EA%B3%A0%EC%96%91%EC%9D%B4")
time.sleep(5) # 5초 동안 페이지 로딩 기다리기
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')
thumbnails = soup.select("#imgList > div > a > img")
i=1
for thumb in thumbnails:
src = thumb["src"]
dload.save(src, f'imgs/{i}.jpg') #각 이미지 파일의 이름은 1.jpg, 2.jpg... 로 한다.
i+=1
driver.quit() # 끝나면 닫아주기
댓글