728x90

안녕하십니까, 간토끼입니다.

파이썬 관련 첫 포스팅입니다. (사실 파이썬은 자신없지만)

데이터크롤링 시리즈는 약 5번에 걸쳐 게시될 예정입니다.


1. 데이터크롤링
데이터크롤링, 혹은 스크래핑이란 이름으로도 불리는 이것은 무엇일까요.
크롤링(Crawling), 혹은 스크래핑(Scraping)이라고 불리는 이것은 웹페이지를 그대로 가져온 후, 거기서 데이터를 추출해내는 행위를 말합니다.

예를 들어 최근 한달 간, 네이버 실시간 검색어 데이터를 수집해서 우리나라 국민 여론의 동향을 파악해보는 방법이 있을 수 있겠고,
특정 브랜드 사이트에 있는 고객 상품평 등의 VOC 데이터를 긁어서 텍스트마이닝을 통해 상품평에 주로 어떤 단어들이 쓰이는지 파악하는 빈도분석, 혹은 고객의 의견이 주로 긍정적인지 부정적인지 감정을 파악하는 감정분석 등 다양한 방법으로 크롤링한 데이터를 사용할 수 있겠습니다.

저도 엄밀한 정의에서의 크롤링과 스크래핑의 차이는 잘 모르겠으나, 그냥 크롤링이라고 명칭하고 앞으로의 포스팅을 진행하겠습니다.


2. HTML
먼저 웹크롤링을 하기 전에, 웹사이트를 구성하고 있는 HTML에 대해서 간단하게 다뤄보겠습니다.


인터넷 서비스의 하나인 월드 와이드 웹을 통해 볼 수 있는 문서를 만들 때 사용하는 웹 언어의 한 종류이다. 특히 하이퍼텍스트를 작성하기 위해 개발되었으며, 인터넷에서 웹을 통해 접근되는 대부분의 웹 페이지들은 HTML로 작성된다.

[네이버 지식백과] HTML [Hypertext Markup Language] (두산백과)


그렇다네요. HTML은 이런 친구입니다.

농담이고요.
쉽게 얘기해서 HTML은 태그(tag)를 이용해 웹문서의 글자크기, 글자색, 글자모양, 그래픽 등을 정의하는 명령어를 작성하는 데 쓰입니다.
즉 이렇게 작성한 웹문서는 웹 브라우저가 해석하여 이용자에게 보여주게 되는데요.

제 블로그이 HTML 코드입니다.

실제로는 제 블로그도 이러한 코드로 이루어져 있습니다. 신기하죠?

HTML으로 프로그래밍한다는 분들을 까는 밈입니다 ㅋㅋ

태그는 종류가 생각보다 다양하지만 사실 데이터크롤링을 하면서 굳이 태그의 종류에 대해 파악할 필요는 없습니다.
따라서 앞으로의 포스팅에서 굳이 태그의 종류에 대해 따져보진 않겠습니다.
(궁금하시다면 타 블로그에서 HTML 공부를...)

3. HTML과 선택자
보시다시피 실제 웹페이지는 생각보다 복잡한 인터페이스로 이루어져 있습니다.
그렇기에 HTML도 여러 태그의 중첩으로 이루어져 있으므로, 각각의 태그가 어떤 위치의 데이터를 의미하는지 잘 파악할 수 있어야 합니다.

만약 내가 원하는 정보가 네이버 검색창에서의 '실시간 검색어'라면, 실시간 검색어를 담고 있는 태그를 찾는 것이 중요하겠죠?

이를 우리는 선택자라고 합니다.

네이버 검색어는 span.tit_text태그로 되어있네요.

참고로 이 HTML 태그를 보려면 크롬으로 웹사이트에 접속하여 보시는 편이 좋습니다.

원하는 부분에 마우스를 대고 오른쪽 클릭한 후 '검사'를 누르면 이렇게 HTML 코드를 볼 수 있는 창이 뜹니다.

또한 검사를 클릭한 후, 검사창 상단에 화살표 표시가 있는 아이콘을 클릭하면 쉽게 선택자를 찾을 수 있습니다.


한번 웹사이트를 좀 더 살펴보겠습니다.


만약 우리가 웹사이트 내에서 오늘의 스포츠 NOW 의 기사 제목과 내용을 수집하고 싶다고 가정합시다.
이때 위 그림을 보면 기사 하나가 특정한 상자로 묶여있는 것을 알 수 있습니다.
우리는 이것을 컨테이너라고 부르며, 컨테이너는 자료의 손실을 막기 위해 상자 개념으로 여러 정보를 포함하고 있는 것 정도?로 이해하시면 될 것 같습니다.

따라서 6개의 기사 제목과 6개의 기사 내용을 각각 수집하고 싶다면, 이 컨테이너를 6개 수집하면 됩니다.
컨테이너는 같은 구조로 이루어져 있으므로, 컨테이너 내에서 기사 제목과 기사 내용에 해당하는 선택자를 파악한다면 쉽게 정보를 수집할 수 있다는 것이죠.

저 네이버 스포츠를 예시로 들어서 각 선택자를 찾아보겠습니다.

컨테이너 : div.text_area
기사 제목: strong.title
기사 내용: p.news

참고로 [ A class = "hi" ] 라는 태그가 있다면, A.hi 라고 하시면 되고, [ B id = "hi" ] 는 B#hi 라고 하시면 됩니다.
class냐, id냐에 따라 태그명에 .을 붙이는지 #을 붙이는지 달라지므로 참고하시기 바랍니다.

그러나 이와 같이, 같은 태그를 사용하지만 제가 수집하려는 정보와 아예 다른 친구들이 있습니다.
예를 들어 저와 제 친구의 이름이 둘다 홍길동인 경우, 담임선생님이 홍길동~ 이라고 출석을 부르는 경우죠.
어떤 홍길동을 부르는 걸까요?

그럴 때 해결방법은 부모님의 이름을 같이 붙여서 부르는 겁니다.
좀 웃기긴 하지만(?) 홍길중 님의 아들인 홍길동~ 이라고 부르면... 설마 둘다 겹칠 일은 없겠죠?
만약 그때도 겹친다면,,, 할아버지, 증조할아버지, 고조할아버지 ... 쭉쭉 올라가면 이론적으로는 언젠가 구분할 수 있게 되겠죠 ㅋㅋ

태그도 마찬가지입니다. 같은 이름의 태그가 겹친다면 그보다 상위 태그를 적용해주면 됩니다.
이를 자식 or 자손이라는 개념이라고 부르는데요.
자식은 말 그대로, A 태그의 바로 다음의 태그를 말하며, 자손은 A 태그의 자식 태그의 자식 태그 ... 등등 후손(?)까지 말합니다.

자식은 태그 간 > 를 사용해주고, 자손은 띄어쓰기만 하면 됩니다.

암튼 위 사례에서 상위 태그를 찾아보면 li.today_item div.text_area 이렇게 됩니다.

43개에서 6개로 바뀐 것을 알 수 있죠?

그리고 li.today_item div.text_area를 띄워서 표기했으므로, 자손 관계라고 이해하시면 됩니다.
만약 자식 관계라면 li.today_item > div.text_area 라고 하면 됩니다.

오늘은 HTML과 선택자에 대해서 배워봤습니다.

다음 포스팅에서는 이렇게 찾은 선택자와 실제 파이썬 라이브러리를 이용해 데이터를 수집하는 방법에 대해서 다루겠습니다.


감사합니다.
잘 읽으셨다면 게시글 하단에 ♡(좋아요) 눌러주시면 감사하겠습니다 :)
(구독이면 더욱 좋습니다 ^_^)



- 간토끼(DataLabbit)
- University of Seoul
- Economics, Data Science

728x90

+ Recent posts