셀레니움
웹페이지의 필요한 정보나 선택자를 선택하여 정보를 스크랩 하는 것을 크롤링 또는 스크래핑이라고 한다.
웹 크롤링이란 웹상의 정보들을 탐색하고 수집하는 작업을 의미
웹 스크래핑은 특정 웹 사이트나 페이지에서 필요한 데이터를 자동으로 추출해 내는 것을 의미
크롤링과 스크래핑은 ‘원하는 데이터를 모을 수 있다’는 점이 비슷
웹 크롤링은 웹 페이지의 링크를 타고 계속해서 탐색을 이어나가지만,
웹 스크래핑은 데이터 추출을 원하는 대상이 명확하여 특정 웹 사이트만을 추적한다는 차이가 있다.
고로 내가 지금까지 해온 크롤링은 사실 스크래핑이었다.
여러사이트나 페이지를 타고타고 들어가서 정보를 수지하는 것이 아닌
내가 지정한 페이지 안에서 필요한 정보들만 긁어 왔으니까
beatifulsoup4 와 selenium의 차이
자세하게 찾아 보지는 않았지만, 강의를 들으면서 느낀 다른 점은
bs4는 정적인 사이트의 정보를 긁어오기에 좋고
셀레니움은 동적인 웹 페이지를 스크래핑 할때 브라우저에 띄운 후 소스코드를 가져오는 차이가 있다고 한다.
셀레니움 사용하기
셀레니움을 사용할때에는 당연히 인터프리터 환경에서 selenium을 설치하고 임포트를 해주어야한다.
그후 추가로 크롬에서 작업시
// 크롬브라우저 버전 확인하기
chrome://settings/help
// 크롬드라이버 다운로드
https://chromedriver.storage.googleapis.com/index.html
자신의 크롬 버전을 확인하고 그에 맞는 드라이버를 설치하여 실행파일을 app.py(셀레니움을 사용할 파일)과 동일한 폴더에 두어야 한다.
app.py를 실행하면 드라이버를 실행 하여 사이트에 접속해 필요한 정보를 가져옴
멜론 차트 스크래핑
from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome('./chromedriver') # 드라이버를 실행합니다.
url = "https://www.melon.com/chart/day/index.htm"
# headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
# data = requests.get(url, headers=headers)
driver.get(url) # 드라이버에 해당 url의 웹페이지를 띄웁니다.
sleep(5) # 페이지가 로딩되는 동안 5초 간 기다립니다.
req = driver.page_source # html 정보를 가져옵니다.
driver.quit() # 정보를 가져왔으므로 드라이버는 꺼줍니다.
# soup = BeautifulSoup(data.text, 'html.parser')
soup = BeautifulSoup(req, 'html.parser') # 가져온 정보를 beautifulsoup으로 파싱해줍니다.
songs = soup.select("#frm > div > table > tbody > tr")
print(len(songs))
for song in songs:
title = song.select_one("td > div > div.wrap_song_info > div.rank01 > span > a").text
artist = song.select_one("td > div > div.wrap_song_info > div.rank02 > span > a").text
likes_tag = song.select_one("td > div > button.like > span.cnt")
likes_tag.span.decompose() # span 태그 없애기
likes = likes_tag.text.strip() # 텍스트화한 후 앞뒤로 빈 칸 지우기
print(title, artist, likes)
식으로 코드를 짜서 실행한다.
네이버 이미지 검색창 스크래핑
단순히 HTML을 띄우는 것 뿐만 아니라 셀레니움을 이용해서 스크롤, 버튼 클릭 등 다양한 동작을 할 수 있음
from bs4 import BeautifulSoup
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome('./chromedriver')
url = "https://search.naver.com/search.naver?where=image&sm=tab_jum&query=%EC%95%84%EC%9D%B4%EC%9C%A0"
driver.get(url)
sleep(3)
driver.execute_script("window.scrollTo(0, 1000)") # 1000픽셀만큼 내리기
sleep(1)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 스크롤 맨밑까지 내리기
sleep(10)
req = driver.page_source
driver.quit()
soup = BeautifulSoup(req, 'html.parser')
images = soup.select(".tile_item._item ._image._listImage")
print(len(images))
for image in images:
src = image["src"]
print(src)
'coding > Python' 카테고리의 다른 글
python flask 시작 (0) | 2022.04.29 |
---|---|
python bs4 하위태그 지우기(원하는 태그만 스크랩핑) (0) | 2022.04.29 |
python pymongo 사용법 (0) | 2022.04.29 |
python bs4 (0) | 2022.04.28 |
python requests 사용법 (0) | 2022.04.28 |