본문 바로가기
자연어 처리

[웹 크롤링] selenium을 이용한 웹크롤링

by 나연하야 2023. 5. 29.
  • selenium 패키지를 이용하면 chrome을 제어할 수 있으며, 이 패키지를 이용하여 웹 정보를 크롤링하는 것이 가능함
  • 이번 시간에는 selenium 패키지를 이용하여 EBS 홈페이지에 있는 '강의명'과 '강의 설명'에 대한 정보를 크롤링 하였음

 

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

sites.google.com

 

  • 크롬 드라이버 구동
from selenium import webdriver

driver = webdriver.Chrome('C:\\Users\\KYH\\chromedriver') # 위에서 다운받은 크롬 드라이버 위치 지정

 

  • 강의명과 강의설명을 넣을 빈 리스트 만들어주기
name_list=[]
description_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]