웹 크롤링(Web crawling) 1.-- CGV 무비차트 크롤링
CGV 홈피- 무비차트

무비차트는 기본적으로 top 7까지 소개하는 식으로 되어있다. 웹 크롤링을 이용하면 이 무비차트를 직접 들여다 보지 않고도 언제든 원하는 순위들을 뽑아낼 수 있다.

모듈/함수 호출

1. 두가지 모듈과 함수를 호출

urllib이라는 모듈을 호출하자. 이 모듈에서 request 함수를 req라는 이름으로 꺼내쓰도록 하자. (알리아스)
웹 크롤링 소개에서도 말했던 Beautifulsoup역시 bs4라는 모듈에서 호출해야한다.

req함수의 또다른 내장함수 urlopen을 이용, 무비차트의 url을 code변수에 할당.
프린트 결과는 외계어일 것. '정제된 코드' 가 아니기 때문이다.

req.urlopen으로 무비차트의 url을 불러왔으나 이상한 코드가 출력될 것이다. 바로 이때가 beautifulsoup을 쓸 차례다.

서버가 제공해준 url을 담은 code변수를 html형식으로 정제하였다.
html 코드로 정제된 모습.

이 정제된 코드는 웹 크롤링의 '광산'이다. 이제부터 이 코드를 이해하고, 원하는 대로 뽑아낼 수 있어야한다.
다시 무비차트 페이지로 돌아가자.

영화 타이틀에 우클릭-검사클릭

이제 서버가 작성해 놓은 html 코드를 볼 차례다. 내가 뽑을 것은 영화 타이틀이기 때문에 영화 제목에 우클릭하여
검사를 누르자.

오른쪽에 실제 서버의 개발자가 작성해 놓은 html코드가 뜬다. 영화제목에 해당되는 코드가 오른쪽에 파란색 박스안에 담긴 부분이라고 보면된다.

2. css 선택자를 이해해야 한다.

Class 속성? id 속성? 부모자손 관계는 또 무엇이며 조부모자손 관계는 무엇인가.
이것이 1 '요소' 라는 한 단위

html 코드들은 위의 사진처럼 '요소'라고 하는 단위로 구성되어 있다. 지금부터 나오는 용어는 약속으로 간주하자.

'요소'를 구성하는 명칭들

위 사진처럼( 악필양해..) 요소는 이루어진다. 속성명과 속성값은 하나의 요소에 두 개씩도 가능하며, 내용자체가
1 요소인 (영어에서 종속절을 생각하면 이해가 빠르다.) 코드들도 있다. 물론 구체적인건 일단 생략하겠다.
지금 중요한건 저것들을 구별할 수 있느냐다.

soup의 내장함수 select_one()은 요소의 내용 중에서도 top 1을 가져온다고 보면 된다.

"strong.title"은 "캡쳐명.속성값"이라는 것을 이제 알 수 있다. 속성명은 어딨지?(css 선택자인 "."이 그에 해당)
이때 주의할 것은 속성명이 두 가지가 있으므로 그에 따른 선택자를 잘 구분해서 사용하자.

#1, #2 참고

속성명이 저 위의 예시처럼, Class라면 "태그명.속성값" 으로, id라면 "태그명#속성값"으로 써야한다.(ex: "strong#title")
3. 부모-자손 관계, 조부모-후손 관계 이해

부모-자손 관계

한 요소에 들여쓰기로 또 한가지 요소가 들어있는 형태가 부모-자손 관계이다. 이 관계는 요소의 태그명이나 속성값들이 겹칠 경우 독립적이고 찾고자하는 내용만 찾아낼때 유용하게 쓰인다.
조부모-후손은 부모 상위에 또 다른 요소가 있을 때 성립할 수 있는 관계이다. (사진은 생략)

무비차트의 영화만 해당하는 요소를 찾는다 (커서를 위로 올리다보면 왼화면에 표시가 이렇게 표시가 되므로 금방찾는다.)
태그명, 속성값이 겹치는 형식이라 상위 top 7(무비차트) 만 나오는게 아니라 그 외의 영화들도 나오는 모습

위의 사진은 조부모관계를 이용하지 않았을 때 출력결과이다. for문을 쓴 이유는
title이 리스트형식으로 반환되기 떄문이다. (그래서 그냥 print(title)은 리스트 형식으로 반환된다.)

조부모 관계 활용시의 결과- 무비차트의 영화(top 7)만 출력되는 것을 알 수 있다.

css 선택자가 이경우에는 " "(공백)으로 이렇게 표기하면 된다. (설명하진 않았지만 i.string은 리스트 형식의 title에서의 '내용'을 뽑는 것.)
몇 개를 뽑을지, 몇번 째만 뽑을지는 반복문에서 count 변수를 사용하던지, while문 break를 이용해도 될 것 같다.


'웹크롤링' 카테고리의 다른 글

웹 크롤링(Web crawling) 0.소개  (0) 2021.08.23