퀀트1_크롤링의 기초 : 인코딩, get방식, post방식, selenium, 정규표현식에 대해 30분간 완벽정리
어 퀀트 스터디 두 번째 어 크롤링을 다뤄볼 겁니다. 크롤링은 인터넷에서 원하는 데이터를 가져오는 건데 API 얻을 수 있는 데이터가 한 계가 있겠죠. 그렇기 때문에 크롤링을 통해서 우리가 원하는 데이터를 퍼올 수 있어야 됩니다. 그래서요, 퀀트 스터디에서는요, 크롤링을 위한 웹 기본 지식과 정적인 크롤링 그리고 동적인 크롤링, 정규 표현 식까지 오늘 다뤄보고 시간을 마치고자 합니다.
어 첫 번째로 이제 크롤링 하기 전에 이제 어떤 식으로 웹페이지가 구성이 돼 있나 이것들을 살펴보면서, 그럼 웹페이지를 동작하는 방식과 그러면이 구성이 어떻게 되어 있는지 그리고 이제 구성에 전에 이제 인코딩이 어떻게 돼 있는지부터 살펴보겠습니다.
자. 인코딩이란 뭔가 하면은 인코딩은 결국은 그 사람의 언어를 컴퓨터의 언어로 이렇게 바꿔 주는 겁니다. 그래서 우리가 이제 엑셀 파일이 깨지거나, 뭐 PPT 깨지거나, 뭐 이런 경우 있잖아요. 그런 경우에 흔히 발생하는 게 인코딩이 깨졌다라는 얘기를 합니다. 인코딩은 사람의 언어를 컴퓨터용으로 0과 1로 변하는 과정인데, 이걸 컴퓨터의 언어로, 언어를 우리 언어로 바꾸는 건 이제 디코딩이 하고, 사람의 언어를 컴퓨터 언어로 바꾸는 걸 인코딩이 하죠.
그랬는데 이제 최초의 인코딩은 컴퓨터가 이제, 이제 영국 미국에서 발명이 됐잖아요. 네, 그래서요, 언어 자체가 알파벳이 기본이었습니다. 그래서 아스키 방식으로 이게 128개의 문, 128 바이트에 알파벳과 숫자, 특수 문자를 이런 식으로 부여를 해 줬었어요. 이게 이제 최초에, 어, 아스키 방식의 아메리 스탠더드 코드포 인포메이션, 어 인터 인터체인지, 이렇게 해가지고 아스키 방식으로 어 만들었었습니다.
그런데 이제 컴퓨터가 전 세계로 퍼지려면 이제 다양한 언어의 종류들이 들어오고, 그래서 다른 인코딩 방식들도 생기겠죠. 그 중에서 우리는 제일 많이 쓰는, 어, 한국 인코딩 방식 중에 euc KR, cp949, utf 8에 대해서 배워보겠습니다. 어 컨트라 단어를 보면은 요거를 컨트라 단어를 인코딩하면 퀀트 이렇게 두 개의 단어로 이렇게 인코딩이 될 수 있는데, 그랬을 때 요거를 1바이트로 하고, 요기를 한 개 바이트로 해서 인식을 시켜 주는 방식을 완성형 방식이다 하고, 이 뒤에 거와 같이 이렇게 자음과 모음을 나눠서 어, 하는 거를 조합형 방식이라고 합니다. 뭐, 한국어도 그렇지만, 뭐 일본어라는 어, 인도도 마찬가지거든요. 이런 식으로 조합을 해 줄 수가 있어요.
자과 모음이 있기 때문에 이런 언어들은 대부분의 나라의 언어는 이런 조합형으로 돼 있습니다. 그래서 어이 조합형으로 만든 방식이 이제 utf8 이고요, 모음과 자음 방식의 코드를 부여한 이런 조합형이 거고. 그런데 이제는, 뭐냐, 한국에서 아 제일 많이 쓰이는 한글에서 제일 많이 쓰이는 문자 250개를 번호를 붙여서, 아까 영어 같은 경우는 128개 있는데, 한글은 이렇게 변화를 많이 하는 거죠. 2305 250개 번호를 붙인 방법이 유이다. 그리고 요거를 더 확장시켜서 1120개 다 번호를 붙인 방식이 cp949 이렇게를 하고 넘어가면 됩니다.
어 두 번째로 외배 작동 방식에 대해서 얘기를 하겠습니다. 니다, 웹을 이해를 할 때 우리가 이제 컴퓨터로 어떤 요청을 받아 오잖아요? 그럴 때 우리가 요청을 던지고, 어, 응답을 받게 됩니다. 그럴 때 우리를, 우리가 고객이라는 단어죠, 클라이언트, 그리고 요청을 누구한테 보내냐, 서버한테 보냅니다. 그래서 이게 클라이언트 사이드, 서버 사이냐, 에러가 날 때 서버 사이드 에러였다, 클라이언트 사이드에 에러였다, 뭐 이런 식으로 표현을 해 주게 되는 거예요.
그랬을 때 이렇게 요청을 받아 던질 때 응답을 받아오게 되는데, 이게 이제 웹의 동작 방식입니다. 이 브라우저 같은 경우도 마찬가지예요. 요 브라우저도 저희가 뭔가 요청을 딱 보낸다라고 할 때, 이 요청을 받아 가지고 오겠죠. 어, 그래서요, 브라우저 자체가 나중에 클라이언트가 되고, 이걸 이제 서버에 던지면 그쪽 서버에는 DB 서버가 있고, DB 서버 앞쪽에는 이제 웹 서버가 있을 텐데, 웹 서버에서 받아 디비에서 데이터를 끌어다가 다시, 요, 응답을 해주는 런 방식이 있습니다.
그래서 우리는 클라이언트인 거고, 서버는 네이버고, 이제 URL, 이제 인터넷 주소다, 이렇게 보시면 되고요. 이런 네이버라는 인터넷 주소에 뭔가 번호가 있는데, 번호와이 인터넷 주소, URL 매칭을 시켜주는 요런 것도 이제 네트워크의 하나의 과정이라고 보면 됩니다. 그래서 이렇게 요청을 던질 때 아무렇게나 던지지 않습니다. 이제 우리가 약속 표준에 맞춰서 이렇게 던지게 되는데, 이거를 http, 아고 하고요, 하이퍼텍스트 트랜스퍼 프로토콜이라고 합니다. 그렇게 약속된 요청 방식에 따라서 이렇게 던지는데, 이거는 초창기에는 이제 푸나 딜리트 있었고요, 네 가지 방식으로 어 요청을 던지게 됩니다.
일단은 갭 방식이 있고 포스트 방식이 있는데, 거는 뒤쪽에서 배우겠습니다. 방식과 포스트 방식으로 요청을 더 던졌을 때, 어쨌든 얘는요 개 방식과 포스트 방식에 따라서 응답을 해 준다, 이렇게 보면 되는데. 이 응답을 해 줄 때 제대로 성공하면 200이 떠요. 그래서 2xx 이렇게 하면은, 어, 성공했다는 거고, 1xx, 어, 1분은 알겠는데, 그런데 지금 처리 중에 있어, 어, 이렇게 하면서 1xx 뜨게 됩니다. 3xx, 어, 추가 동작이 필요한 거예요. 예를 들어서 이게 리디렉션, 이렇게 줬는데, 예를 들어서 어떤 정보들이 부족해, 그래서 그걸 주면은, 내가 줄게, 뭐, 이런 식으로 해서 리디렉션이 뜨는 거고.
자, 클라이언트 쪽에 에러다, 우리가 뭔가를 잘못 던졌다, 그래서 우리의 요청을 실행할 수 없기 때문에 우리가 발생했다. 예를 들어서 제일 많이 틀리는 거, 지금 없는 주소를 입력을 하게 되면, 어, 너이 주소를 잘못 입력했어, 클라이언트 오류가 뜨게 되겠죠. 자, 서버 사이드 오류다, 어, 서버에서 처리를 하지 못해서 문제가 나는 거죠. 그럴 때는 뭐, 서버 쪽 의 네트워크가 될 수도 있고, 서버 쪽에 그런 그 DV 쪽에 문제가 될 수도 있고, 어쨌든 서버에서 처리를 못할 경우에는가 뜨게 됩니다.
예, 그랬을 때 이제 요런 것들에 대해서 기본적으로 우리가 클라이언트와 서버가 있고, 요청과 응답이 있고, 거기에 따라서 메시지를 이렇게 주고받고요, 걸 던질 때는 http 방식인 객과 포스트에서 주어 받는다라는 것까지 배워봤습니다.
어, 그랬을 때 어떤 정보로 구성이 있고 어떻게 주고 받느냐, 이거를 볼 텐데, 어, 기본적으로 html, css 방식으로 외분 구성이 되어 있습니다. 그래서 이렇게 H html이 뼈대 같은 역할을 해요. 그래서 헤드와 타이틀, 이게 이제 타이틀이 이렇게 있고, 어, 바로는 디 is 페이지, 뭐 이렇게 해가지고, 뭐 헤딩 페이지, 요거 바디로 이렇게 쓰여진 거죠.
그래서 바디에 H1, p 있는데, H1, 2, 3, 4, 이런 거는 이제 크기를 나타내고, 이제 여기 쪽에 H1 제일 크고, 2 그번, 그다음, 뭐 이렇게 돼 있고, p, n, 이걸 문단을 나눠 가지고 다음 문단으로 이렇게 문단의 구분 자를 p, 이렇게 들어갑니다. 그래서 p 앞에 들어가면은 이걸 문단을 열어 주는 거고, 이렇게 해서 p 슬래시가 붙으면 이거 문단에 닫는 거고, 바디도 똑같이 열었다가 이렇게 닫았다가, 바디에 있는 것들이 요게 보이고, 어, 기본 구조는 이렇게 생겼습니다.
그랬을 때 이제 p p, 아고 h 아지, 이렇게 봤고요. 그다음에는 이제 바디에 들어갈 수 있는 거를 더 보겠습니다. 예까지는 봤는데, 이 이렇게 리스트들이 이렇게 오고 싶어요. 그럴 땐 리가 붙는데, 리스크 밖에 쪽에, 어, 이제 유 유가 이렇게 들어가면, 유 유는 이제 유니, 유니파이드 거 같은데, 유니파이드 리스트 해가지고 리스트들을 묶어 가지고, 너의 리스트 하나의 단체야, 너희 리스트 하나의 단체야, 이렇게 만들어주기도 하고요, 순서가 있는 더 리스트는 이제 이렇게 만들어줍니다.
아, 유파가 아니고, 리스트가고 더 리스트가 ol이라고 하네요. 그래서 요렇게 리스트들을 만들어주고, 거를과로 감싸줄 수 있다, 이렇게 되는 거고. 여기게 테이블이 바디올 수도 있어요. 이렇게 테이블이 올 수도 있는데, 테이블은 테이블로 단위로 해가지고 를 하나씩 하나씩 하나씩 해준 다음에, 어, 묶어 줄 수가 있습니다. 그때 이제 테이블 헤드 같은 경우는로 들어가고, 테이블 데이터 같은 경우는 밸류 값들이 이렇게 들어갈 수가 있겠죠. 예, 그래서 렇게 테이블을 만들어 줍니다.
태그와, 어, im a 이미지인데, 그 a 태그는 우리가 하이퍼링크 레퍼런스를 이렇게 잡아줄 때, a 하이퍼링크 레퍼런스, 이렇게 주소를 하게 되면 요거를 클릭했을 때 거기로 가게끔 됩니다. 그, 그랬을 때 여기 거세를 하고, 뒤쪽에 문자도 이렇게 오게 되면 그 문자가 표시가 되고, 여기로 가는 하이퍼링크가 생기게 되죠. 어, 이미지 src, n, 어, 그 이미지를 요렇게 불러오는 겁니다. 그래서 이미지가 있는 곳을 이렇게 찍어 주게 되고, 여기에 스하고 하이트를 이렇게 크기를 픽셀로 이렇게 정해 줄 수도 있지만, 퍼센테이지로 하게 되면, 어, 그게 이제 몇 퍼센트의 크기로, 원래 크기보다 몇 퍼센트의 크기로 만들어 줘, 이렇게 되는 겁니다.
어, 그랬을 때 이제 태그 hrc 태그까지 받고, 제일 많이 쓰는 태그 중에 이제 diiv 태그하고 스펜 태그가 있어요. 어, DI V 태그는 이렇게 9분자를 이렇게 정해 주는 거고, DI V 태그 하나하나마다, 어, 스타일 이렇게 적용을 해 줘서, 이렇게 css 바로 넣어 줄 수도 있고, 이거를 이제 diiv 안에다가 클래스를 잡아 줘서 그 클래스 단위별로 css 따로 만들어 가는 방법이 있습니다. 그건 뒤쪽에 나올 텐데, 어쨌든 이렇게 diiv로 잡아서 안에 내용물들을, 어, 우리 h 태그하고 p 태그는 배웠잖아요, 렇게, 어, 넣어 주기도 하고, 렇게 h p 태그 대신 스펜 태그를 써서 텍스트 를 직접 넣어 주기도 합니다. 그건 뒤쪽에 나올 거예요.
어, css, 어, 아까 이런 식으로 이런 색상이나 크기나 이런 정보들을 넣어 주는 걸 css 하는데, 배경, 그리고 본문 자체 이렇게 넣어 줄 수가 있겠죠. 그래서 위에 html 이렇게 잡아준 거는 이렇게 각자 넣어 줬다고 했을 때, 어, 이렇게 css, html 안에 스타일 자체를, 를 택으로 렇게 해 가지고 css 파일을 이렇게 넣어 줬고, CS이 스타일을 이렇게 넣어 준 거 사이에 클래스별로 하나하나의 딕셔너리를 만들어 줍니다. 그래서 백그라운드 컬러와 컬러와 패딩을 어떻게 해 줄 건가, 어, html 시작한 거 안에 스타일을 이렇게 따로 만들어 주면, 요걸 css 따로 저장했다고 보시면 되고, 요거는 요런 식으로 스타일로 가격도 하고 파일로 나중에 따로 뽑기도 하는데, 이렇게 스타일로 가는 경우, 이렇게 클래스를 하나하나씩 다로 해서 잡아줬다 그랬을 때요, 디브로 해가지고 이렇게 잡아준 거에, 어, 여기 H2 안에 클래스를, h 2의 클래스가 랭귀지 거는요, 랭귀지 거 클래스, 이렇게이 속성이 적용이 되죠.
여기에 p 안에 클래스를 디스크라이브 했을 때요, 디스크라이브 이걸 어떻게 해야 되는지 이렇게 잡아 주게 되고요, 그러면 여기에 대해서 디크 설명해 주는 것들은, 요렇게 주황색으로 해가지고 이렇게 되고, 어, 메인으로 들어가게 된 귀지에 대한 것들은 파이썬 R 이런 식으로, 예, 9분자를 지어지게 되죠. 그래서 css, html, 요런 식으로 클래스를 통해서 활용을 한다, 이렇게 클래스를 통해서 활용을 하는 방식을 이제 셀렉터 한다, 이제, 이 내용들이 앞에 쪽에 설명이 돼 있습니다.
그래서 그 분자는, 어, 여기 유튜브에이, 유튜브의 생활코딩이 하고 있어요. 유튜브 보시면 생활 코딩에, 어, 제가 요거를 html이랑 그 css 요걸 보고 공부했는데, 생활 코딩으로 검색하신 다음에 이게 나옵니다. 생활코딩 html 네트워크도 되게 잘돼 있고, 이런 식으로 세개, 그 html, css, 자바스크립트 것들이 되게 잘돼 있기 때문에, 요거를 한개 한개 재생 목록을 공부하시면 좋을 거 같아요.
네, 그래서 우리는 지금까지요 크롤링을 위한 기본 지식과 html, css, 그리고 이런 것들에 대해서 알아봤는데, 그러면 이제 크롤링을 해 볼 거예요. 예, 크롤링을 할 때 우리가 개값 포스트 방식으로 리퀘스트를 한다, 그랬잖아요. 그렇게 해서 그냥 받아오는 걸, 이거를 이제 정적 크롤링이 합니다. 정적 크롤링은, 어, 방식 일단 받아오는 거는 우리가 네이버 같은 경우에는 이렇게 네이버로 컨트롤 했을 때요, 주소가 위에 거 바뀌면서 이렇게 정보를 바로 보내 주는 딱 열려 있는 요런 거를 이제 개 방식이라고 합니다.
그리고 반대로 이렇게 닫혀 있는 경우, 이 동행 복권인이 복건 사이트를 열어 보시면, 이런 식으로 이게 어디를 클릭하지, 이걸 23으로 이렇게 클릭을 해서 이렇게 해도, 도이 위에 주소는 바뀌지 않아요. 위에 주소는 바뀌지가 않고, 여기에 있는 결과 값들만 바뀌게 되는데, 이렇게 하면이 위에 것들을 아무리 수정한다, 그래도 이거를 알 수가 없겠죠. 그래서 이걸 어떻게 끌고 올 거냐, 이거를 할 때마다 이렇게 바뀌는데, 이걸 어떻게 끌고 올 거냐, 이게 이제 포스트 방식으로 해서 던지는 겁니다.
그랬을 때 갭 방식으로는 그냥 간단하게 리퀘스트로 하면 되기 때문에, 밑에서 바로 볼 거고요, 포스트 방식 은 렇게, 어, 제가 하나를 볼 게요. 여기에 저도 엣지는 개발자 도구가 익숙하지 않기 때문에 걸로 보겠습니다. 이걸로 봤을 때 F 112를 여기에서 이렇게 누르면, 오른쪽에 이렇게 뜹니다. 오른쪽에 떴을 때, 여기에먼트 트는 여기 어떤 구로 html이 구성돼 있나라는 거고, 어, 여기 네트워크를 찍어 보시면, 네트워크가 내가, 어, 리퀘스트를 이제 클라이언트가 보내는 거죠.
클라이언트가 리퀘스트를 이렇게 23으로 이렇게 바꿨을 때, 네트워크로 볼게요, 23으로 이렇게 바꿔서 조회를 딱 눌렀을 때, 이렇게 막 뭔가 조 하면서 이렇게 명령들이 내려오는데이 중에서, 어, 자이, 이 게임 리트 2 메소드 바이 아까 겟, 겟도바시, 여기에 뭔가 던졌다는 건데, 헤더를 보시면, 아, 여기 사이트에 다 요청을 포스트 방식으로 했고, 요것들을 헤더를 이런 식으로 넣어서, 어, 받았다라는 거고요. 페이로드 쪽을 보시면, 페이로드 쪽은, 어, 뭐 딱히 이런 것들은 없네요. 그래서 이거는 페이로드는 이제 속에 편지 내용 같은 애들이고요, 헤더는 편지 봉투 같은 겁니다.
그래서 헤더 정보를, 어, 넣거나, 아니면 페이로드를 넣어서, 이 리스폰스를 받아오게 되는 거죠. 여기 쪽에 리스폰스 보시면, 예, 여기 화면에 표시된 것들이 지금 쫙 다 보이죠. 기존의요, 엘리먼트에서 이거를 클릭했을 때, 어, 따로 이렇게 보이지는, 이걸 클릭하기 전에 따로 보이지는 않죠. 그런데 이거를 클릭하고 나면, 얘네들이 쫙 뜨면서 보이는데, 이거는 아까 그 네트워크로 가서 이렇게 볼 수 있다라는 게, 이게 정적인 네트워크입니다.
어, 그랬을 때 이제 이 명원 크롤링하기, 요거 명원 수집하는 걸 한번 해 볼 거예요. 이런 식으로 해서 개 방식으로 해 가지고 이렇게 명언을 수집합니다. 그런데 요걸 한번 이렇게 해서 구조를 한번 볼게요. 구조를 볼 때 렇게 해가지고 봤을 때, 아, 이렇게 뭔가 바디가 대로 쌓여져 있고, 거기 로가 있고, 그 안에, 아, 이게 있구나, 그 안에 이게 있구나. 그래서 이 텍스트는 지금 어디에 있나, 이 텍스트는 스펜이라는 거에 이렇게 텍스트로 해가지고, 클래스가 들어가 있고, 이 커트가 이렇게 있고, 예, 그 위에는 클래스가 이렇게 있고, 그다음에 로우가 이렇게 있습니다.
그랬을 때 이 구조를 가져오려면, 이거를 퀘스트라는 라이브러리를 써서 이렇게 개 방식으로 해서 바로 가져올 수가 있죠. 왜 개 방식이냐라고 하면, 여기서 이제 이거를 클릭을 하면 이렇게 페이지도 이렇게 바뀌고, 그냥 바로 여기다 직관적으로 표시가 되기 때문에, 개 방식으로 그냥 바로 가져올 수가 있는 거예요. 이게 페이지가 이렇게 바뀔 때마다 이렇게 바뀌죠.
그래서 요거를 일단 이렇게 해서 리퀘스트에 겟해 URL 던져 주면, 리퀘스트 200, 아까 위에서 했던 거 나오죠, 거기에 어 천개를 가져와 바라라고 했는데 이렇게 됐고, 이제 이걸 가져왔을 때 이렇게 텍스트 방식으로 이렇게 가져와요. 그러면 이거를, 아, 나는이 디에 있는 걸 가져와 가지고 보고 싶은데, 못 가져 오잖아요. 그래서 이거를 한 개 한 개씩 단위로 리스트 형태로 쪼개 줘야 돼요. 그래서 쓰는게이 숲을 쓰게 됩니다. 이거는 p 인스톨 뷰티풀, 이렇게, 어, 뷰티풀 bs4, 이렇게 될 거예요.
예, 이렇게 해가지고 설치를 하고, 이게 설치된 라이브러리가 설치가 됐다면 이제 이거를 쓸 수가 있습니다. 그렇게 해서 이 뷰리풀 소을 가져와서, 커트 콘텐츠에 html 파스 한 거를 가져와서 헤더를 가져와 봐라, 위, 는 이제 요런 방식으로 됐었는데, 이게 이제 리스트 형태로 들어가서 파서를 이렇게 가져오게 되죠. 그랬을 때 이 뷰리풀 소은 그냥 잘라 주는 것뿐만 아니고, 이런 함수들을 제공해 줘요, 파인드 all. 아까 브에 커트가 있었죠, 커트를 해가지고 가져오면, 이 쿼트 단위로 전체를 가지고, 쿼트 단위 아래에 있는 전체를 가지고게 됩니다.
아까 쿼트 단위의 안쪽에 스펜어 쌓여서 아서도 있었고, 펜으로 쌓여서 텍스트도 이렇게 있었죠. 예, 그랬을 때 이 스펜 텍스트로 된 거를 가져오게 되면, 이 스의 텍스트를 전체를 가져오게 되고, 여기에 텍스트만 이렇게 가져올 수도 있습니다. 그랬을 때 이 커트를 가져오게 되면, 이 클라스 커트인 것들의 디를 해가지고요, 리스트 컴프리헨션 안에 것들을 전부 다 한 번에 가져올 수도 있는 거죠.
그랬을 때 요거를 이제 이렇게 해가지고 하나하나 파인드 올로 하면 지정해 줄 수가 있는데, 이거를 우리는 아까 경로로 봤었, 아아, 그래서 경로로 이렇게 해 가지고 한 번에 지정해 주게 되면, 리스트 컴프레션 쓸 필요도 없이 그냥 한 번 이렇게 지정이 되고, 요거를, 어, 리스트만 이렇게 해 가지고 텍스트만 이렇게 뽑아올 수도 있습니다.
네, 그리고 저자 가져오는 건, 아까 스팸 밑에, 이제 스몰이 아는 그런 작은 작게 표시를 하라는 그 태그 안에, 어, 라는게 있었잖아요, 클래스가 있었잖아요. 셀렉터는 항상 셀렉트로 할 때는 다시 붙으면 이제 클래스가 된다. 예, 그렇게 아시면 되고, 스몰 아는 스몰로 된 태그의 클래스가 아인 거를 가져와라, 이렇게 된 거죠. 그래서 이것도 스팸 밑에 있었기 때문에, 이렇게 해서 가져왔습니다.
그다음에 주소를 가져오는 거는 이제 A 태그를 하면, 거기에 있는 주소들을 가져오는. 이 태그의 주소들의 콘텐츠 텍스트를 보면, 요거는 앞에 뭔가가 생략이 됐었죠. 그래서요, 앞에 커트까지 해 가지고 리스트 컴프레션을 이렇게 해서 가져왔고요, 요것들을 다 가져온 거를 가지고 리스트를 해가지고 안쪽에다 하나씩 담아 준 다음에, 어, 이걸 슬립을 해서 1번부터 100번 페이지까지 쫙쫙 다 넘기면서, 이 페이지 번호가 바뀌면 이게 내용도 바뀌었죠.
그래서 슬립을 하면서, 어, 100번까지 이렇게 해가지고 불러와서, 거를 리스트로, 아까 다 담아 줬었기 때문에, 리스트로 담아 준 걸 하나하나의 컬럼으로 떨어뜨려서 이렇게 100개의 쿼트 폴 컬럼이 만들어졌습니다. 그랬을 때 이제 금융 속보 같은 경우도 이거랑 똑같은 방식으로 해서 이렇게 만들어 줬어요. 이거는 한번 직접 해 보시면, 어, 재밌을 것 같고요, 요거는 링크를 제가 보여 드릴테니까 그 링크로 하시면 됩니다.
아요, 요거 자체를, 어, 기터브 제가 올려 줄테니까, 어, 하시면 재밌을 것 같습니다. 어, 그리고이 기업 채널에서 오늘의 공시를 가져오는 건데요, 어기 기업 채널 공시는 여기 사이트에 가시면 있고, 이거 아까 로또 홈페이지 가져오는 것처럼 똑같은 방식으로 해서 이걸 가져오면 됩니다. 더보기, 이렇게 클릭하시면, 어, 요거 자체는 이제 어떤 걸 가져와야 되는지, 요거를 이제 보면서 포스트 방식으로 해가지고 이걸 가져오게 되겠죠.
네, 그래서 포스트 방식으로 해서요, html요 사이트에서 이 디스클로즈 두를 보고, 페이로드를 저희가 이렇게, 어, 페이로드를 이렇게 만들어 줘서 포스트 던질 때, 어, 리퀘스트 포스트에서 url 데이터는 페이 로드다, 이렇게 해가지고 같이게 던지, 같이 던지게 되면 값을 받아와서 뷰티풀 소에서 이렇게 파싱해 준 다음에 지금 쭉 가져온 겁니다. 그랬을 때 요것도 동일하게, 어, html 해가지고 프리파이 한 다음에 이렇게 넣어 줄 수가 있겠죠. 그래서 판다스 데이터로 만들어 줬습니다.
그래서 동적 크롤링을 이제 일단은 해볼 건데요, 이제 여기까지 해서 정적 크롤링이 끝났는데 동적 크롤링 있어요. 이게 뭐냐면, 요즘에 뭐 직방이 그지, 이런데 보시면 네이버 카페, 그리고 다른이 같은데도 마찬가지죠. 우리가 위치가 있는데 이렇게 딱 클릭을 하면, 그 위치에 따라서요 정보들이 업데이트가 되면서, 뭔가 자바스크립트가 열심히 이쪽 저쪽 정보를 주고 받게 됩니다.
그거는 이제, 이제 클라이언트 테, 우리가 웹페이지를 요청을 하면, 클릭 클릭하면서 이 브라우저가 html 이렇게 쭉쭉 이렇게, 우리가 클릭을 하면서 이렇게 던지게 되죠. 그랬을 때, 얘는 이거, 우리가 던진 명령어를 해가지고 그 검색을 해 가지고, 이 자바스크립트, 어, 아스를 통해서 여기에서서 계산을 해서, html 결과를 비에서 뽑아서 우리한테 정제해 가지고, 이거를 보내게 됩니다.
그러면 브라우저는 html 받아와서 이렇게 하게 되는데, 그래서 기본적으로는 요 사이트 자체가요, 사이트 자체가 정보를 안 가지고 있고, 이걸 DV 거쳐서 정보를 보내 준다라고 생각하시면 되고, 그러면 이렇게 하기 위해서는, 어, 우리도 던지는 방식을 그냥 게시나 포스트 방식으로 던지면 안 되고, 브라우저 자체가 작동을 하게끔 던져 줘야 됩니다.
그래서 필요한 게 셀레니움이란, 이렇게 해서 설치를 하신 다음에 사용을 하시면 돼요. 저는요, 가상환경으로 해 가지고 했는데, 여기에서 혼다에서 이 가상환경을 불러온 다음에, 여기에서 베이트 어 ml4 t, 이렇게 하면 ml 4로 가상환경이 활성화가 됐죠. 그랬을 때 pip 인 셀레니, 이렇게 하면 셀레니움을 현재 버전으로 해가지고 설치를 해주게 돼요.
저는 셀레이 설치가 웬만하면 되어 있는데, 지금 안 돼 있는 것들만 업데이트를 해준 겁니다. 업데이트를 해서 렇게 설치를 했어요. 그래서 셀레늄을 설치했기 때문에, 요거를 웹드라이버 셀에서 가져와서, 를 가져와서 웹드라이버 크롬 서비스는, 어, 크롬 드라이버로 해서 인스톨 해 주고, 그러면 크롬 드라이버를 따로 다운 받을 필 필요가 없어요.
예전에는 크롬 드라이버를 다운 받았어야 되는데, 얘 자체가 인스톨이 자동으로 됩니다. 그래서 이렇게 하게 되면, 얘가 불러와서 인스톨이 되고, 요게 로봇의 소프트 의해서 제어되고 있습니다. 이렇게 뜨죠. 그러면요, 객체가 지금요 드라이버 거 생성으로 해서 만들어진 거예요.
그랬을 때이, 네이버로 일단 들어가서 데이터를 한 100개 정도 받아올, 1,000개 정도 받아올 거예요, 그랬을 때 이렇게 받아왔죠. 얘는 지금 네이버로 이렇게 들어갔죠. 이걸 좀 더 보기 쉽게 왼쪽으로 하고, 이렇게 정렬을 하면서 하나씩가 보겠습니다.
자요, 이렇게 드라이버 겟 하고, 페이지 소스, 이렇게 하면은요, html 코드를 이렇게 받아와서 이렇게 불러온다, 이렇게 보시면 되고요. 그랬을 때이, 코드를 받아왔기 때문에, 어, 리 리로 이렇게 찾았던 것처럼, 얘도 뭔가를 찾아야 되잖아요, 태그를 찾아야 되잖아요. 그랬을 때 여기 화면에 직관적으로 이게 뉴스, 증권, 이런 식으로 있는데, 여기에 밸류를 뉴스로 해가지고, 얘 뉴스를 클릭을 한번 해줄 거예요.
이 뉴스로 돼 있는 거를 클릭을 한게 됩니다. 다시가 볼까요, 여기에서, 자, 여기 다시 이렇게 하면, 새로운게 이렇게 떴고, 여기에서 이번에는 뉴스가 아니고 증권을, 어, 클릭해 가지고 이렇게 하면 증권으로 이렇게 넘어가게 됩니다.
어, 그랬을 때 여기에서 스위치 2 같은, 스위치 2 윈도우 같은 경우는, 여기에 전 전달된 창에 핸들로 드라이브 컨트롤을 전환을 이렇게 하게 됩니다. 그랬을 때, 얘를 윈도우 핸들로 이렇게 해 가지고 전환을 이렇게 하게 되죠. 그리고 예, 이렇게 클로즈 명령을 줬기 때문에, 얘를 닫게 됩니다.
그리고 C2 윈도우 핸들 1 이렇게 되게 되면, 어, 핸들 원으로 이렇게 했고, 여기에 클래스 네임에 서치 인풋, 여기 보시면이 이것도 이제 개발자 도구로 이렇게 쓸 수가 있는데, 여기서 말고, 여기서도 클릭하신 다음에 개발자 도구는 똑같이 쓸 수 있습니다.
그랬을 때 얘가 뭐냐, 이 쿼리 서치 인풋이 이렇게 있죠, 쿼리 서치 인풋, 이렇게 있는데, 그래서 서치 인풋이라는 클래스인 걸 알 수 있어요, 클래스 네임이 치 인풋이, 그래서 바이 클래스 네임으로 해서 설치 풋인 거를 하고, 샌드 키, 어, 여기에 이 텍스트를 보내라고 해서 지금 이렇게 보낸 거죠. 그래서 얘도 개발 제독으로 하면서 이렇게 찾아줄 수가 있다.
그랬을 때 검색어, 이렇게 보냈고, 그다음에 지금 일, 지금 얘를 클릭해야 되잖아요. 얘도, 어, 아, 얘가 뭐냐라고 봤을 때 이제 B BT 설치로 돼 있기 때문에, 이렇게 BT 설치해 가지고 이렇게 하면 클릭을, 얘를 클릭을 해 주게 됩니다. 클릭을 해 줘서 BT 설치가 이렇게 클릭을 해서, 어, 네임이 이렇게 나오게 되죠.
어, 그랬을 때 이게 이제 BT 설치도 되고, 첫 화면에서는 아마 BTN 치였던 거 같아요. 음, 그런데 BT 설치로 이렇게 바뀌었다, BT 설치로 가고, 그다음에 여기에 갑들이 이제 다른 식으로 이렇게 명령어를 우리가 바꿔 주고 싶다, 샌드 키 해 가지고, 뭐, 삼성전자 우주가, 제가 마음 아리를 심하게 하고 있는, 성전자 우의 주가가 어떻게 되냐, 아휴 또 떨어졌네, 이렇게 해가지고 이렇게 가게 되죠.
그렇게 해서 얘를 이제 마음대로 이렇게 조정하면서 갈 수도 있고, 요거를, 어, 이렇게 여기를 클래스를 찾을 수도 있지만, 여기 자체를 그냥 이렇게 해서 얘가 어디 있는지 이렇게 표시가 뜨죠. 그러면 얘를 카피해서 엑스로 해가지고, 이거 보시면 엑스가 이렇게 돼 있어요. 어, 그래서 이 자체를 바이 엑스로 해서 여기에다 밸류를 넣어 준 다음에, 뭐, 클릭하거나, 뭐, 이걸 샌드 키를 하거나, 이렇게 얼마든지 가능합니다.
그래서 클릭하고 샌드 키를 받는데, 이제 엑스큐트 스크립트는, 어, 자바스크립트를 바로 실행해 줄 수 있는 애예요. 예를 들어서 이 브라우저에이 함수, 윈도우 스크롤 2 0부터 이제 바디 스크롤 다운을, 그 제일 위에 있는 위치부터, 이거를 제일 아래로 내려라, 이렇게 되는 건데, 그렇게 해서 이 브라우저, 브라우저를 이렇게 드라이버가 조정을 하게 됩니다.
그래서 예, 요렇게 하단까지 내리라는 자바스크립트 명령어, 고요, 이렇게 자바스크립트 명령어를 이렇게 큐트 스크립트로 해서 해줄 수가 있다, 그랬을 때 이제 슬립 주고, 이걸 다시 파고, 슬립 주거하고 런 식으로 해서 받아올 수가 있습니다. 이렇게 받아온 것들은 뷰리풀 수로 해서 이렇게 잘라 줄 수도 있고요, 그랬을 때 이제 퀵 마지막에 퀵하게 되면, 이게 했었던 페이지가 종료가 되면서 이렇게 없어지는 걸 볼 수 있습니다.
그래서 요약하면 이제 저희는 이제 클럭, 클릭이 아든 뭐, 샌드 키 이런 걸 봤는데, 뭐, 이런 식으로 컨트롤 V 할 수도 있고, 클리어 이런 걸 할 수도 있고, sq2 스크립 할 수도 있고, 아까 바이 아이디하고, 어, 엑스를 봤는데, 나머지 이제 태그라는 css 클래스 네임 이런 식으로 해서, 어, 지정을 해 줄 수가 있다, 이렇게 보시면 될 거 같습니다.
마지막으로 정규 표현식을 할 겁니다. 어, 정규 표현식은 렇게 리라는 걸, 이건 이제 기본 내제 되어 있어요. 어, 파이썬에 들어 있기 때문에 그냥 쓰면 되고, 데이터가 이렇게 길게 나와 있을 때 이런 걸, 이제 정규 표식이라고 합니다. 이게라고 돼 있는 거는 슬래시 한 다음에 역시를 한 다음에를 하게 되면, 이거는 어, 숫자 숫자인 거고, 숫자가 플러스가 됐잖아요. 그래서 두 자리가 되고, 점 점은 여기 점, 이걸 나타내고, 다시 숫자 플러스, 이렇게 해가지고 숫자가 있는 것까지 표현을 해주고, 점한 다음에 점을 해준 다음에 퍼센테이지를 해 줘라, 그러면 여기에 데이터를 받아서, 어, 지금 숫자점 숫자이 퍼센테이지 있는 거를, 어, 찾는 거예요.
그러면 여기에서요, 숫자점 숫자 퍼센티지가 있는 건 29.2% 밖에 없죠. 그러면 요런 식으로 찾아서, 어, 데이터에서 넣어 준 겁니다. 그러면 기본적으로 이게 전화번호라, 주민등록 번호라, 아니면 수치라, 이런 것들을 잘 뽑아줄 수가 있겠죠. 그래서 이런 메타 숫자들을, 메타 문자들을 이렇게 뽑아 줄 수가 있는 거고요.
어, 그래서 여기에는 이제 모든 문자라는, 이런 반복 문이라, 이런 것들을 이렇게 서치나 매치나, 어, find all, 모든 패턴들을 이렇게 찾는다는 파인드 올로 해 찾았는데, 그래서 전규 표현식으로, 어, 찾는 방법에 대해서 이렇게 나와 있습니다. 요거는 그냥 쭉 문장을 이걸 보면서 그냥 한 번씩 보고, 나중에 또 찾아보기도 하고, 요거를 잘 저장해 두면은 그냥 좋을 것 같습니다. 이거 하나하나 다 외우는 거보다는 그냥 채지 BT 테 잘 물어보면 될 거 같고요.
오늘 클로징에 대해서 전반적으로 알아봤고, 저번 시간에는 SQL 대해서 알아봤기 때문에, SQL 저장을 할 때 렇게 크롤링을 해서 요거를, 어, 데이터베이스화 해 가지고, 어, 정규 표식으로 해서 저장을 하면 좋을 것 같다라는 게, 어, 이번 시간의 결론이었습니다. 감사합니다 합니다.