왠만하면 class 찾아서 크롤링 하지 말자.

김민국·2022년 1월 7일

미세먼지 팁

목록 보기
2/3

개요

크롤링할때 개발자도구로 요소를 찍어보는 나
크롤링이라고 하면 난 당연히 beautifulsoup으로 요소찍어서 값 가져오는줄 알고 있었다. (그림처럼 무지성 요소검사 ㅋㅋ)
근데 어려운 구조에서는 당연히 이렇게 주먹구구로 데이터를 스크랩 하는 것은 매우 어려워지고 웹 구조가 조금만 바뀌어도 바로 크롤러가 망가져버린다...

개인적으로 Air Table의 한 프로젝트 url을 스크랩 하려고 하는데 구조가 꽤 복잡해서 이 방법은 많이 어렵다고 느꼈고 웹의 변화에 대처가 거의 불가능하다 느꼈다.
그래서 이런 단순무식 방법 말고 웹이 바뀌어도 데이터를 가져올 수 있는 유연한 방법을 찾다가 새로운 2가지 방법을 찾았다.

새로운 방법

1. Public API를 활용한다.
2. Public으로 풀지는 않았지만 네트워크 탭에서 response 훔쳐오는 방법?..ㅋㅋ

이런 2가지 방법으로 클래스 찾고 구조를 파헤치는 노가다를 피할 수 있었다.

1. Public API를 활용한다.

크롤링 한다니까 뭔소리냐 싶을 수 있는데,
기본적으로 크롤링 하려는 사이트에서 내가 원하는 데이터를 제공하는 API가 이미 공개되어 있을 수도 있다!

2번에 들어가기 위해서는 이래야 한다.

  • 내가 원하는 데이터를 API로 제공하고 있지 않다.
  • 원하는 API가 있으나, 본인의 컨텐츠가 아니면 수집할수 없다는 것과 같은 이유로 제한이 걸려있다.
    ex) 일주일간의 벨로그 트렌드 글을 받아오고 싶은데 내가 쓴 글 모음을 받을 수 있는 API만 존재할 경우

2. Public으로 풀지는 않았지만 네트워크 탭에서 response 훔쳐오는 방법

내가 크롤링 하고자 하는 화면을 프론트엔드에서 만드려면 어쨌든간에 백엔드로부터 정보를 받아와야 한다.
그 정보를 받아오는 request를 마치 웹에서 보낸 것 처럼 만들어서 요청을 보내준다면 내가 원하는 알짜 데이터 response를 받을 수 있게 된다는 개념이다.
에어테이블 요소검사

내가 크롤링 하려는 페이지의 요소 검사를 해본 모습이다. 복잡한 구성에 아득히 정신이 날아갈 뻔 했다 ㅎㅎ;
이걸 하나하나 요소검사할 생각하기 전에 표 정보들을 한번에 받아올 수 있는 네트워크 요청을 찾아보면 된다.

네트워크 탭

XHR로 놓고 찾아보니 다행히 있었다. 이 요청에 원하는 데이터가 다 들어있으니 이 요청을 흉내내서 우리가 요청하면 요소검사 없이 데이터를 받아볼 수 있다.
이제 헤더탭으로 옮겨보자.

우리에게 필요한건 2가지이다.

  • 일반
  • 요청 헤더

요청url
요청헤더

일반에서 요청 url과 메서드를 알 수 있고, 요청 헤더에서는 요청에 필요한 값들이 들어있다.

모두 때려박아 요청을 보내보자.

ㅗㅜㅑ 너무 잘된다.

403 에러가 나는 경우에는 권한이 없는 것이다. 아쉽지만 이 방법으로는 불가능한 것 같다.
401 에러의 경우에는 뭔가 빠뜨려서 요청이 거부되는 것이다. 다시 한 번 확인해보자.

0개의 댓글