-
인프런 동영상 웹 스크래핑하기 - 1: 준비 과정개발/웹크롤링 2022. 1. 8. 15:40
놀랍게도 첫 포스팅입니다. 앞으로는 이곳에 저의 발자취를 남길 것입니다.
오늘 해볼 코딩은 인프런 강의 영상을 스크래핑하는 법에 대한 것입니다. 강의 영상을 오프라인으로 다운로드받아야 할 일이 있는데, 인프런에서 제공해주지 않아서 파이썬을 이용하여 추출해봤습니다.
참고로 이렇게 얻은 강의 영상을 상업적으로 이용하거나 무단 배포할 시 처벌 받을 수 있으니 조심하시기 바랍니다.
우선 도구부터 소개합니다.
- 파이썬
기본적인 도구죠. 필수적으로 필요합니다. 3.x 가급적 최신 버전으로 준비해주세요. 저는 3.8.8 버전을 이용했습니다. - 셀레니움 (selenium)
브라우저를 이용해 웹 크롤링 등에 활용합니다. 저는 이 중에서도 seleniumwire라는 라이브러리를 다운 받아 사용했습니다. pip를 통해 selenium, seleniumwire 둘 다 다운로드 받아주세요
pip install selenium pip install selenium-wire
- 크롬 드라이버
셀레니움에서 크롬을 사용하기 위해 필요합니다. https://chromedriver.chromium.org/downloads에서 다운로드 가능합니다. 자신의 버전에 맞는 크롬을 다운로드 받아서 사용하시면 됩니다. 프로젝트가 있는 폴더에 위치시켜주세요(혹은 sys.path에 해당하는 폴더)
크롬 버전 확인 : 크롬 우측 상단 메뉴 클릭 -> 도움말 -> Chrome 정보 클릭
준비를 마쳤으면 바로 분석해봅시다. 우선 셀레니움을 통해서 크롬부터 켜봅시다. 파이썬 인터프리터 창을 엽니다.
>>> from selenium import webdriver >>> driver = webdriver.Chrome()
이렇게 하면 크롬 창이 뜹니다. 이제 인프런 홈페이지로 가보겠습니다.
>>> driver.get('https://inflearn.com')
driver.get(url) -> 브라우저가 url로 이동합니다.
한 번 로그인 창을 띄워보도록 할까요?
로그인 버튼을 선택하고 싶은데요. 개발자 모드(F12)를 엽니다.
signin 클래스를 가진 a 태그네요. 다음과 같이 클래스로 선택할 수 있습니다.
>>> loginbtn = driver.find_element('class name', 'signin')
이렇게 얻었으면 click 메서드를 통해 click 이벤트를 발생시킬 수 있습니다.
>>> loginbtn.click() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\src\anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 81, in click self._execute(Command.CLICK_ELEMENT) File "C:\src\anaconda\lib\site-packages\selenium\webdriver\remote\webelement.py", line 710, in _execute return self._parent.execute(command, params) File "C:\src\anaconda\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 424, in execute self.error_handler.check_response(response) File "C:\src\anaconda\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable (Session info: chrome=97.0.4692.71)
이런. 에러가 나는군요. element not interactable이라고 하네요. 클릭할 수 없다고 말하고 있습니다. 그런데 분명히 클릭이 가능할텐데... 이럴 때에는 find_elements로 찾아줍니다. 사실 자바스크립트를 써서 dom 객체로 먼저 테스트해보면 가장 좋기는 합니다. 그러나 이렇게 시행착오를 겪으면서 하는 것도 좋죠. 아니면 나중에 설명하겠지만 xpath를 활용하면 코드 한 줄로 가능합니다.
>>> loginbtns = driver.find_elements('class name', 'signin') # 리스트로 받아오기 >>> loginbtn = None # 로그인 버튼을 미리 할당 >>> for btn in loginbtns: >>> # 로그인이라는 글자가 있으면 로그인 버튼 할당하기 >>> if '로그인' in btn.text: # (element).text를 통해서 innertext에 접근 >>> loginbtn = btn >>> loginbtn.click()
로그인 창을 띄우는 데 성공했습니다. 다음 시간에는 사용자에게 아이디 비밀번호를 받아서 자동으로 로그인하는 기능을 만들겠습니다.
'개발 > 웹크롤링' 카테고리의 다른 글
인프런 동영상 웹 스크래핑하기 - 마치며(최종 코드) (1) 2022.01.16 인프런 동영상 웹 스크래핑하기 - 3 : 네트워크 분석 - 2 (0) 2022.01.16 인프런 동영상 웹 스크래핑하기 - 3 : 네트워크 분석 - 1 (1) 2022.01.10 인프런 동영상 웹 스크래핑하기 - 2: 자동로그인 기능 - 2 (0) 2022.01.08 인프런 동영상 웹 스크래핑하기 - 2: 자동로그인 기능 - 1 (1) 2022.01.08 - 파이썬