1. 환경 설정
팀 프로젝트중 필요한 데이터를 인터넷에서 크롤링해 데이터를 모아 보자
selenium과 bs4을 install
pip install selenium
pip install bs4
bs4도 크롤링에 사용할 수 있으므로 같이 설치
필요한 라이브러리를 가져온다
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By # 특정 요소를 가져오기 위한 메서드
#Selenium은 웹페이지 내의 특정 요소(들)을 찾는 많은 메서드들을 제공
그리고 chrome을 사용해 크롤링을 할것이기 때문에 크롬 브라우저를 제어하기 위한 드라이버를 설치야해한다.
(꼭 버전에 맞게 설치)
115.0. 버전 이후는 여기서 다운
https://googlechromelabs.github.io/chrome-for-testing/
Chrome for Testing availability
This page lists the latest available cross-platform Chrome for Testing versions and assets per Chrome release channel. Consult our JSON API endpoints if you’re looking to build automated scripts based on Chrome for Testing release data. Last updated @ 20
googlechromelabs.github.io
115 이전 버전은 여기
https://chromedriver.chromium.org/downloads
ChromeDriver - WebDriver for Chrome - Downloads
Current Releases If you are using Chrome version 115 or newer, please consult the Chrome for Testing availability dashboard. This page provides convenient JSON endpoints for specific ChromeDriver version downloading. For older versions of Chrome, please se
chromedriver.chromium.org
본인의 운영체제에 맞게 설치
mac-x64 와 mac-arm64의 차이는
mac-x64은 M1칩 전인 모델의 최적화 되어있다고 함.
mac-arm64 M1 칩을 사용하는 버전 .
크롤링 하기 위한 준비는 끝!
driver = webdriver.Chrome()
url = 'https://www.google.co.kr/?hl=ko'
driver.get(url)
크롬이 잘 열린다면 이상없음
2. 추출할 데이터
데이터는 코딩 강의의 데이터를 추출 (인프런)
강의 이름 | lecture_name |
강사명 | teacher |
강의 가격 | price |
검색창에 '검색할 내용'을 입력했을 때
url은 다음과 같다
내가 검색할 단어 리스트
(django, spring, react, c언어, python, java)
ex) 검색창에 django를 입력하면 다음과 같은 url로 연결된다.
3. 크롤링
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import re
driver = webdriver.Chrome()
url = 'https://www.inflearn.com/courses?s='
li = ['django','spring','react','c언어','python','java']
all_data = []
for i in range(len(li)):
newdic ={
"lecture_name": "",
#"lecture_img": "",
"teacher": "",
# "lecture_url": "",
"price": "",
#"platform": "",
"field": "" #어떤 분야의 강의를 가져올 것인지 매핑 ex) django=1 , spring=2 ...
}
newurl = url + li[i]
driver.get(newurl) # 접속
- 반복문을 사용해서 각 검색어 수 만큼 반복
- url에 직접 검색어를 추가해 이동할 검색 url (newurl)을 만들었다.
- newdic은 딕셔너리 형태로 데이터를 key으로 나누어 value 값으로 데이터를 저장하기 위해
- 요소에 접근하기 위한 과정은 끝
요소 접근
import selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import re
driver = webdriver.Chrome()
url = 'https://www.inflearn.com/courses?s='
li = ['django','spring','react','c언어','python','java']
all_data = []
for i in range(len(li)):
newdic ={
"lecture_name": "",
#"lecture_img": "",
"teacher": "",
# "lecture_url": "",
"price": "",
#"platform": "",
"field": "" #어떤 분야의 강의를 가져올 것인지 매핑 ex) django=1 , spring=2 ...
}
newurl = url + li[i]
driver.get(newurl) # 접속
#-----------------------------------------------------------------------------
#lecture_name
name = driver.find_element(By.XPATH, '//*[@id="courses_section"]/div/div/div/main/div[4]/div/div[1]/div/a/div[2]/div[1]')
newdic["lecture_name"] = name.text
#price
p = driver.find_element(By.XPATH,'//*[@id="courses_section"]/div/div/div/main/div[4]/div/div[1]/div/a/div[2]/div[4]')
p = p.text
pp = re.sub(r"[^0-9]",'', p) # 문자열에서 숫자만 골라내기
newdic["price"]=pp
#teacher
teach = driver.find_element(By.XPATH,'//*[@id="courses_section"]/div/div/div/main/div[4]/div/div[1]/div/a/div[2]/div[2]')
newdic["teacher"] = teach.text
newdic["field"]= i+1
all_data.append(newdic)
print(all_data)
- xpath를 이용해 요소에 접근
- xpath는 개발자 도구에서 요소를 클릭해 복사해 올 수 있음.
- find_element()를 사용해 다음 xpath 경로에 데이터를 가져온다.
- .text를 통해서 텍스트를 가져와야한다.
- ex) newdic["teacher"] = teach.text
- 데이터를 담은 newdic을 all_data에 추가해준다.
- newdic["teacher"] = teach.text
크롤링한 데이터를 출력
성공!