[4주차] 패스트캠퍼스 데이터 분석 부트캠프 _ python 파이썬으로 크롤링하는 법을 배우다 -웹 크롤링 기초-
오늘은 패스트캠퍼스 데이터분석 부트캠프 4주차에 배운 웹크롤링에 대해서 낯선 용어에 대한 설명과 간단한 크롤링 방법을 포스팅 해보겠습니다!
(그나저나 하루 반만에 파이썬 문법을 끝내고 웹크롤링 실전 연습을 하게되다니... 진도 나가는 속도가 어마무시합니다! 😫 수업땐 멘붕 + 못따라감의 연속 + 이걸 내가 어떻게 하지 난 파이썬 문법도 아직 잘모르는데..? 하며 근심이 가득하지만 또 찬찬히 검색해가며 복습을 하다보면 어느새 문법 코드도 어색해하던 모습은 사라지고 크롤링을 해내는 모습을 발견할 수 있습니다!
패캠 커리큘럼이 진짜 희한한것이 과정이 너무 빨라서 못따라갈거같은데 시간이 지나면 자연스럽게 그 과정을 어느정도 마스터하고 있어요! ㅋㅋ 스파르타식 교육법의 위대함.. 😂😂)
🟨 크롤링이란?
웹 크롤링이란 웹상의 정보들을 탐색하고 수집하는 작업을 의미
웹이란 World Wide Web의 줄임말로 우리가 흔히 쓰는 url 속에 www. 이다!! 🫥🫥
크롤링을 할때는 크롬(Chrome)을 사용하는 것이 좋습니다! 그것은 바로 크롤링 할때 사용하는 개발자 도구가
있기 때문입니다!
개발자 도구를 빠르게 여는 단축키는 F12 입니다. 꾸르팁👍
🟨 HTML
크롤링을 본격적으로 시작하려면 html 에 대한 기본적인 정보는 알고가시는게 좋습니다!
관련 공부를 경험해보신적이 없다면 영문도 모르고 주먹구구식으로 암기하게 되는데 나중에 되면 내가 왜 이 코드를 쓰는지도 모르게 될 뿐더러 어떻게 써야하는지도 모르는 상황에 처하게 될 수 있습니다..!
깊지는 않지만 가볍게 알아두는건 좋을거 같습니다 😁
- HTML이란 : web은 html이란 언어로 작성됩니다. 즉 우리가 보는 웹페이지는 html이라는 언어로 구성되어있는 것이죠!
- Web browser : HTML로 작성된 웹을 보기 편하게 해주는 소프트웨어를 웹 브라우저(Web browser). 예시로 사파리 크롬 등등이 있습니다!
- HTML의 구조
개발자 도구를 열어보시면 elements는 전부 이 구조로 이루어져있습니다!
이 구조를 미리 익혀두시는게 크롤링을 하며 요소 뽑아내기를 할 때 유용할거 같습니다.
⭐꼭 알아야되는 속성명
ID
하나의 웹페이지에 하나만 쓸 수 있는 고유한 이름으로 <태그이름 id="속성값">의 구조로 쓰임
CLASS
비슷한 형태를 가진 요소에 여러번 사용할 수 있는 이름으로 <태그이름 class="속성값"> 의 구조로 쓰임
다만, CLASS 이름은 비슷한 형태를 가진 요소에서 중복될 수 있으므로 요소를 가져올 때 주의를 해줘야합니다.
🟨 Selenium
- Seleium이란 : chrome-driver의 컨트롤을 도와주는 라이브러리입니다. 웹크롤링에 유용한 라이브러리로 selenium과 beautiful soup이 있습니다.
- ChromeDriver: Chrome 브라우저의 인스턴스를 시작하고, 명령을 전달하여 웹 페이지를 로드하고 JavaScript를 실행하고 페이지의 내용을 검색하게 합니다.
웹크롤링을 위해 쥬피터 노트북을 이용했습니다!
사진 속에 형광 밑줄이 그어져있는 것이 웹크롤링을 위한 기본 세팅입니다!
🟨 크롤링
웹 크롤링을 위한 기본 코드
browser = webdrver.Chrome() # <-- 크롬창을 띄워달라는 명령
browser.get('http://www.naver.com') # <-- 해당 url로 이동해줘! (원하는 url을 입력하면 됩니다)
위 코드를 실행하면 새로운 크롬창이 열리고 네이버로 이동해 있는걸 확인해보실 수 있습니다!
⭐미션: 네이버 날씨 데이터 수집하기⭐
1. 네이버 검색창 클릭하기
CLASS = search_input 인것을 확인 !
browser.find_element(By.CLASS_NAME, 'search_input').click()
2. 검색창에 날씨 입력하기
browser.find_element(By.CLASS_NAME,'search_input').send_keys('날씨')
3. 검색 아이콘 클릭하기
browser.find_element(By.CLASS_NAME, 'btn_search').click()
# 검색 아이콘의 CLASS = btn_search 입니다.
여기까지 따라오시면
날씨창이 열린 것을 확인하실 수 있습니다!
🙋♀️🙋♀️ 여기서 잠깐!!
로케이터(Locator)에 대해 알고갑시다!
코드에서 By.CLASS_NAME 이 도대체 뭔지 궁금하지 않으셨나요?!?! (전 굉장히 답답했었습니다..!!)
로케이터란, find_element( ) 함수 에 우리가 가져올 요소를 ( ) 안에 넣어서 크롬 드라이버가 알 수 있게 변환해주는 것입니다.
⭐꼭 알아야되는 로케이터
By,ID
By.CLASS_NAME
By.XPATH
* xpath는 id나 class 가 잘 안보일때, 애매할때 사용하는 것으로 마우스 오른쪽 > copy > xpath copy를 누르시면 쉽게 따올 수 있습니다!
4. 날씨 데이터 가져오기
개발자 도구에서 날씨 요소 뽑기
data = browser.find_element(By.CLASS_NAME, 'temperature_text').text
text와 click()의 차이는
text는 변수데이터이고
click()은 매소드라는 차이가 있습니다! (함수같은 개념)
5. 체감 가져오기
체감
찾으려고 보아하니 체감 강수 습도 서풍이 다 CLASS 네임이 똑같다 -> 어떻게 해결하지?
이것들의 부모(공통 요소)를 찾아라! => summary_list
부모라고 표현한 이유는 제일 상위에 있는 요소기 때문입니다.
(1) 부모찾기
browser.find_element(By.CLASS_NAME, 'summary_list').text
(2) 변수로 지정하기
parent = browser.find_element(By.CLASS_NAME, 'summary_list')
(3) 공통되는 요소들 가져오기 -> 체감 강수 습도 서풍의 공통된 요소 sort
parent.find_elements(By.CLASS_NAME, 'sort')
(4) 리스트로 반환된 요소들 중 인덱스 1번 가져오기
parent.find_elements(By.CLASS_NAME, 'sort')[0].text
이렇게 코드를 입력하시면
'체감 12.7°'
깔끔하게 뽑힌 모습을 볼 수 있습니다!
🟨find element 와 find elements의 차이
find element
WebElement 하나를 반환하고, 여러 개가 있을 경우 첫 번째 element를 반환한다.
find elements
WebElement 리스트를 반환한다. 해당되는 element가 없을 경우 empty list를 반환한다.
리스트로 반환되는 점을 꼭 기억해두셔야 합니다! 이용이 간편하기 때문👍
웹크롤링 기초는 여기서 마치도록 하겠습니다!
요소를 뽑아내는 과정에서 중복되는 것들이 많아서 많은 사례를 크롤링해보며 연습해보는게 좋을것 같습니다 😁😁