- selenium 패키지를 이용하면 chrome을 제어할 수 있으며, 이 패키지를 이용하여 웹 정보를 크롤링하는 것이 가능함
- 이번 시간에는 selenium 패키지를 이용하여 EBS 홈페이지에 있는 '강의명'과 '강의 설명'에 대한 정보를 크롤링 하였음
- 먼저, 크롬 드라이버를 설치해야 함(https://sites.google.com/a/chromium.org/chromedriver/downloads)
- 크롬 드라이버 구동
from selenium import webdriver
driver = webdriver.Chrome('C:\\Users\\KYH\\chromedriver') # 위에서 다운받은 크롬 드라이버 위치 지정
- 강의명과 강의설명을 넣을 빈 리스트 만들어주기
name_list=[]
description_list=[]
- 정보를 불러오고 싶은 url (중 1-1 수학) -> for 문을 이용해 불러옴
- https://mid.ebs.co.kr/course/view?courseId=10209892&left=series#list
- https://mid.ebs.co.kr/course/view?courseId=10031436&left=series#list
- https://mid.ebs.co.kr/course/view?courseId=100004182&left=series#list
- https://mid.ebs.co.kr/course/view?courseId=10209960&left=series#list
- 강의명의 selector 정보(크롤링하고 싶은 위치 > 오른쪽 마우스 > 검사 > ··· 클릭 > 복사 > selector 복사)
- #addLectForm > table > tbody > tr:nth-child(3) > td.title > div > span > strong
- #addLectForm > table > tbody > tr:nth-child(5) > td.title > div > span > strong
- #addLectForm > table > tbody > tr:nth-child(7) > td.title > div > span > strong ···
- 강의명과 강의정보 웹크롤링
- url 중 가장 많은 강의를 가지고 있는 것이 51강이어서 이를 기준으로 range(1, 52)로 설정함
- 모든 url이 51강의를 가지고 있지 않기 때문에 에러를 방지하기 위해 try, except 문을 사용함
from selenium.webdriver.common.by import By
for x in [10209892, 10031436, 100004182, 10209960]:
url=f'https://mid.ebs.co.kr/course/view?courseId={x}&left=series'
driver.get(url)
for y in range(1,52):
try:
name=driver.find_element(By.CSS_SELECTOR, f'#addLectForm > table > tbody > tr:nth-child({2*y+1}) > td.title > div > span > strong').text
name_list.append(name)
description=driver.find_element(By.CSS_SELECTOR, f'#addLectForm > table > tbody > tr:nth-child({2*y+2}) > td > div > dl:nth-child(2) > dd').text
description_list.append(description)
except:
pass
- pandas 이용하여 결과 정리하기
import pandas as pd
result = pd.DataFrame(zip(name_list, description_list), columns=['강의명', '설명'])
print(result)
강의명 설명
0 01강 소수와 합성수 거듭제곱 및 소수와 합성수의 의미를 안다.
1 02강 소인수분해(1) 자연수를 소인수분해할 수 있다.
2 03강 소인수분해(2) & 형성평가 소인수분해를 이용하여 약수를 구할 수 있다. 형성평가 문제 풀이
3 04강 최대공약수 소인수분해를 이용하여 최대공약수를 구할 수 있다.
4 05강 최소공배수 소인수분해를 이용하여 최대공약수를 구할 수 있다.
.. ... ...
140 40강 정비례 그래프와 반비례 그래프(1) 정비례 그래프와 반비례 그래프의 비교 및 그래프 그리기
141 41강 정비례 그래프와 반비례 그래프(2) 정비례 그래프와 반비례 그래프의 비교 및 그래프 그리기
142 42강 좌표평면과 그래프-중단원 발전 문제(1) 좌표평면과 그래프 한 걸음 더 깊이 있는 문제
143 43강 좌표평면과 그래프-중단원 발전 문제(2) 좌표평면과 그래프 한 걸음 더 깊이 있는 문제
144 44강 좌표평면과 그래프-중단원 발전 문제(3) 좌표평면과 그래프 한 걸음 더 깊이 있는 문제
[145 rows x 2 columns]
'자연어 처리' 카테고리의 다른 글
[딥러닝을 이용한 자연어 처리 입문] 센텐스버트 (0) | 2023.05.29 |
---|---|
[딥러닝을 이용한 자연어 처리 입문] 심층신경망 이해하기 (1) | 2023.05.13 |
[딥러닝을 이용한 자연어 처리 입문] 소프트맥스 회귀 (0) | 2023.04.16 |
[딥러닝을 이용한 자연어 처리 입문] 벡터와 행렬 연산 (0) | 2023.04.16 |
[딥러닝을 이용한 자연어 처리 입문] 선형 회귀와 로지스틱 회귀 (0) | 2023.04.16 |