웹 크롤링
인터넷 상의 웹페이지들을 방문하여 정보를 수집하는 자동화된 방법을 의미합니다.
웹 페이지의 종류
정적 웹페이지 : 웹 브라우져에 화면이 한번 뜨면 이벤트에 의한 화면의 변경이 없는 페이지를 의미합니다. 즉, 페이지 방문자 모두에게 동일한 정보를 제공합니다. 주로 HTML, CSS 등을 사용하여 제작되며, 서버에서 별도의 처리 없이 그대로 전송되어 표시 됩니다.
위의 사진처럼 더보기를 눌러도 웹 페이지 URL이 바뀌지 않는 상황을 보여줍니다.
동적 웹페이지 : 웹 브라우져에 화면이 뜨고 이벤트가 발생하면 서버에서 데이터를 가져와 화면을 변경하는 페이지를 의미합니다. 사용자의 요청이나 입력, 시간 등에 따라 변화하는 내용을 보여줍니다. 서버 측 스크립트(PHP, ASP.NET) 또는 클라이언트 측 스크립트(JavaScript)를 사용하여 생성됩니다.
위의 사진들을 보면 특히, 인터넷 신문의 경우 기사를 클릭하면 웹 URL이 변경되는 모습을 확인할 수 있습니다. 이런 것들을 동적 웹페이지라고 부릅니다.!
네이버 증권 [코스피, 코스닥] 지수 크롤링 해보자!
네이버 증권에서 코스피 지수의 url 입니다. 굳이 모바일 버전으로 본 이유는 좀 더 정보의 갯수가 PC 버전보다 적어서 크롤링하기 쉬울 것이라고 생각해서 가져오게 되었습니다.
response의 status code가 200이 나오는지 확인해야 합니다.
만약 403이나 500이 나오면 request가 잘못되었거나 Web Server에서 수집이 안되도록 설정이 된 것이라고 봐야합니다.
이럴 경우에는 header를 설정하거나 selenium을 사용해야 합니다.
여기서 200이 나오더라도 response 안에 있는 내용을 확인하기 위해서는 response.text 를 통해 확인할 수 있습니다.
response의 결과물을 json형식으로 바꾸어서 data에 저장하고, 이것을 우리는 pandas의 dataframe으로 변환하여 저장합니다. 크롤링이 가장 최신의 날짜부터 맨위에 정렬되어 있으므로 head()를 통해 가장 최근 5일만 나오도록 하였습니다. 여기서 우리가 필요한 데이터는 날짜와 종가 지수만 알고 싶었기 때문에 두 열만 이렇게 뽑아봤습니다.
네이버 증권에 있는 정보들을 크롤링 하는 법은 생각보다 단순해서, 규칙성만을 찾으면 되었습니다. 그래서 이것을 함수로 바꾸어서 적용을 시켜봤습니다. 네이버는 한 페이지에 최대 60일의 내용밖에 안 나오도록 했다는 것을 알 수 있었고, 오히려 함수를 만들어서 파라미터로 넣을 수 있도록 해봤습니다.
해당 부분은 이제 데이터 전처리를 하는 부분입니다. 우리가 이 코스피 지수나 코스닥 지수, 환율을 그래프를 그리고자 할때는 수치화가 되어있어야 합니다. 그런데 object type 즉, 문자열로 저장이 되어있기 때문에 그냥 plot을 그리면 오류가 생길게 분명했습니다. 그래서 3자리 별로 콤마가 찍혀있었는데, 그것을 삭제하고 float 타입으로 바꿔서 새로운 컬럼으로 주었습니다.
다음 증권[환율] 확인하기
다음 증권에서 환율 정보를 크롤링을 진행하였습니다. HTTP statuscode가 '403 Forbidden'이 발생한 것을 확인할 수 있었습니다. 즉, 클라이언트가 서버에 요청을 보냈지만, 서버가 그 요청을 거부한것을 나타낸 것입니다. 클라이언트는 서버에 접근할 권한이 없으며, 서버는 클라이언트에게 요청된 리소스에 대한 접근을 허용하지 않는 것을 의미합니다. 다음 서버 개발자는 외부에서 접근하는 것을 막아놓은 것을 확인할 수 있었습니다.
response에는 어떤 내용이 담겨져있는 지 확인하기 위해서 출력해본 정보입니다.
크롬 - 개발자 도구 - Headers - Request Header에 이러한 것들이 적혀져 있는 것을 확인할 수 있었습니다. 웹 사이트 별로 차이가 있겠지만, 다음 같은 경우에는 Referer과 User-Agent를 header로 넣어줘야 크롤링이 가능한 것을 확인할 수 있었습니다. 결국엔, 웹 사이트 별로 어떻게 인증을 하느냐(?)에 차이가 있었던 것 같습니다. 어느 곳에도 정답은 있지 않고 경험만이 하나씩 넣어보면서 해야 얻을 수 있는 것 같습니다.. 서버 개발자들이 많은 노력이 있는 것 같습니다..
Headers를 추가하고 나니, 정상적으로 응답이 된 것을 확인할 수 있었습니다.
끝으로 오늘은 크롤링에 대해서 간단하게 알아봤는데, 크롤링이라는 것이 어떻게 보면 데이터의 질보다 양이 더 중요시 되는 시대로 변화하게 되면서 중요한 기술로 자리 잡고 있지만, 무분별하게 데이터를 가져오기 떄문에 조심해야 하는 부분으로도 자리 잡는 것 같습니다. 항상 이 점을 유의하면서 크롤링을 진행하면 좀 더 책임감 있는 개발자로 성장할 수 있지 않을까(?) 라는 생각을 조심스레.. 해봅니다..
오늘의 일기.. 마치겠습니다.
'개발 > 에이블스쿨' 카테고리의 다른 글
[AIVLE-SCHOOL] 매번 헷갈리는 Python Numpy에 대해서 알아보자! (0) | 2024.02.27 |
---|---|
[AIVLE-SCHOOL] 1일차, IT 프로젝트 관리도구[GIT] 사용법에 대해서 알아보다 [Feat. 생활코딩-이고잉 선생님] (2) | 2024.02.22 |