본문 바로가기

생활정보&사용 후기/MOON's 생활정보&사용 후기

파이썬 프로그래밍 강좌 웹 크롤링 실제 활용 후기


#1 Intro 

얼마 전 인프런 판다스 강의 후기를 올린 적이 있다.

[학습 후기] pandas 판다스 데이터분석 기초(인프런)

그때 글을쓰면서 예전에 배웠던 파이썬 웹크롤링을 실제로 활용해 봤다.
누군가 보기엔 저런 걸로 자랑을 하느냐고 할 수 있겠지만,

비전공자인 나로서는 배운 내용을 실제 내가 필요로 하는 곳에 써본 첫 경험이다.

오늘 그 경험을 공유하고자 한다.

 

#2 당면한 문제

`pandas 판다스 데이터 분석 기초` 학습 후기를 쓰기 위해선 강의 목차가 필요했다.

그래서 목차를 복사해서 긁어오려고 하니 옆에 시간까지 같이 나왔다.

지우면 되겠지 하고 일단 복사!

파이썬 웹크롤링1

하지만 인생은 실전이라 했던가... 호락호락 복사되지 않는다.

회색 줄까지 같이 딸려오고 아무튼 썩 마음에 들지 않는다.

파이썬 웹크롤링2

#3 문제 해결을 위한 아이디어 도출

순간 파이썬 웹크롤링 수업에서 배웠던 것을 써보면 어떨까 하는 생각이 들었다.

14줄밖에 되지 않기 때문에 그냥 손으로 써도 된다. 사실 그게 더 빠르다. 

하지만 웹크롤링을 배운 학생으로서 어찌 그냥 넘어가겠는가? 바로 도전했다.

#4 파이썬을 활용한 문제해결 과정


실습 예제 코드를 복사해 고치기 위해 아톰 에디터를 켰다.

네이밍 하기 귀찮아서 숫자로만 했더니 구분이 안 간다.........

배웠던 코드를 찾기 위해 파일을 확인하면서 강제 복습했다.

파이썬 웹크롤링3

예전에 예제로 풀었던 유사한 코드를 복사해 수정한 최종 결과

파이썬 웹크롤링4

복습 차원에서 코드를 하나하나 분석해 보자

# 4-1 웹크롤링에 필요한 라이브러리 선택

웹크롤링에 필요한 urllib 라이브러리를 임포트,

urllib.request를 간단하게 req로 부르겠다고 선언,

bs4 라이브러리에서 BeautifulSoup를 임포트 그리고 bs로 부르겠다고 선언!

한글이 원활히 출력될 수 있게 sys, io 임포트 그리고 6,7 째 줄 코드 주저리주저리 복사.

#4-2 웹크롤링에 변수 선언

url 이란 변수에 크롤링할 웹 사이트 주소를 입력(인프런, pandas 데이터 분석 기초강의)

res 변수에 req 라이브러리를 이용해 url 변수에 담긴 주소를 열고 해당 주소의 html 읽어 온다.

soup 변수에 bs 라이브러리를 이용해 res 변수를 넣는다.

res 변수에 html 파일을 읽어왔으므로 파싱방법은 html.parser 입력

여기까지 하고 soup을 출력하면

아래와 같이 크롤링할 인프런 웹사이트의 html 내용이 출력된 걸 알 수 있다.

파이썬 웹크롤링5

# 4-2-1 궁금증 해결

나는 처음에 beatifulsoup이 이해가 잘 안 됐다. 그래서 documentation을 찾아보니까 이렇게 나온다.

Beautiful Soup gives us a BeautifulSoup object, which represents the document as a nested data structure:
- Beautiful Soup Documentation -

내가 이해한 내용은 html 내용을 nested? 한 데이터 구조로 바꿔준단 말인 거 같다.

html 파일을 자신들이 다루기 쉬운 nested 한 데이터 구조로 바꾼 다음 bs4 함수를 통해 파싱하겠다로 받아 드렸다. (제가 잘못 해석하고 있는 거면 고수분들의 지적 부탁합니다.)

한 가지 더 덧붙이자면 html 말고 xml, xml, html5lib 등 여러 파일 형식의 문서도 가능하다고 나온다.

파이썬 웹크롤링6

#4-3 웹크롤링에 필요한 선택자 선정

다시 본론으로 돌아와 크롬을 키고 f12 클릭

이제 우리가 원하는 부분의 정보만을 가져오는 선택자를 찾아야 한다. 

아래처럼 강의 목록은 span 태그에 잘 감싸져 있다. class는 unit_title이다.

html 문서 내에서 중복되는 class 없는지 확인 

class 이름이 교육과정 외에 중복이 없는 것을 확인하고 unit_title을 선택자로 지정 

파이썬 웹크롤링7

#4-4 웹크롤링 결과물 출력

각 unit_title의 내용을 하나씩 출력하기 위해 for 문을 사용

soup 변수에 select 함수? 를 사용해 특정 위치를 찾는다. 찾는 위치는 unit_title 클래스

그리고 i를 하나씩 출력하고 문자만 출력하기 위해. string을 붙여준다.

#5 웹크롤링 문제 해결

아래의 결과처럼 원하는 강의 목록만 출력된 것을 알 수 있다. (왼)

.string()을 안 붙여주면 오른쪽과 같이 span 태그도 같이 출력돼 지저분하다.

파이썬 웹크롤링8

#6 파이썬 웹크롤링 활용 총평

복습 겸 장황하게 길게 썼지만 내용 원래 내용도 별로 없고 코드도 몇 줄 안된다.

다만 강사님이 당부하신 말씀이 실생활에서 내가 직면한 문제를 해결해보라고 하셨다. 

그리고 차일피일 미루다 인제야 한번 해본다.

소소하지만 원하는 결과를 얻었을 때, 그 짜릿함은 정말 기분 좋다.

조금 더 성장한 기분이다.


파이썬을 활용한 웹크롤링 중간 학습 후기(인프런)

[do it! 점프 투 파이썬] 파이썬 독학 및 파이썬 책 리뷰

[학습 후기] pandas 판다스 데이터분석 기초(인프런)