Upstage AI Lab 6기

크롤링 (API, json)

jyun34 2024. 11. 25. 23:42

 

우리는 여태까지 BeautifulSoup, Selenium을 이용해서 웹사이트에서 직접 데이터를 긁어왔다.

그렇게 크롤링을 할 때는 해당 사이트에서는 많은 요청을 처리하게 되서 서버가 느려질 수 있기에, robots.txt로 크롤링 규칙을 만들었고 이를 어길 시 밴을 할 수도 있다. 

그래서 할 수 있는게 많지 않아 여태까지 좀 재미없게 진행해왔다. 할려면야 할 수는 있는데 즐겨쓰는 사이트라 밴을 당하면 곤란하다.

 

 하지만 마음껏 크롤링 할 수 있는 방법이 있는데 그건 바로 API이다.

 

API는 따로 API 서버를 마련해뒀기 때문에 여기서 아무리 크롤링을 해도 본래 서버에는 영향을 주지 않는다.

그래서 이번엔 네이버 API를 사용할 생각이다.

 

API를 이용하기 앞서 알아두면 좋은 지식이 있는데, API는 보통 json 파일을 통해 통신한다.

 

여기서 키-값 쌍은 dictionary를 의미한다.

실제로 json 파일을 보면 수많은 dictionary와 list의 쌍으로 이루어져있다.

json 파일 구조

 

 

이번에 할 크롤링은 네이버 API로 할 것이다. (구글 API는 유료.)

 

 

네이버 개발자센터에 들어가 오픈 API 이용신청을 하면 된다.

 

대충 만들어라.

 

대충 만들면 ID와 비밀번호를 주는데 이건 API를 이용할 때 집어넣으면 된다. 절대 남에게 보여주면 안된다.

 

이제부터 우리가 할 크롤링은 블로그 제목과 이미지를 크롤링하는 것이다.

빨간색으로 표시한 곳에 들어오면 우리가 사용할 API의 사용법이 나오는데 제법 친절하게 나와있어 거의 그대로 하면 된다.

 

이건 네이버 측에서 제공하는 예시 코드인데 유심히 봐야할 것은 'client_id'와 'client_secret', encText이다.

'client_id'와 'client_secret'는 오픈 API 이용신청을 하면서 발급받은 것을 여기에다가 붙여넣으면 된다.

그리고 encText의 "검색할 단어"에 원하는 내용을 입력하면 해당 검색의 결과가 나온다.

그냥 그대로 써도 된다.

 

하지만 나는 여러모로 원하는대로 안 되서 위의 코드를 바탕으로 새로 코드를 썼다.

 

나는 대충 웹소설 추천을 검색해봤고, 이렇게 json 파일을 받았다는 것을 알 수 잇다.

파라미터를 참고해서 url 뒤에 "&start={입력}&display={입력}"을 추가로 기입하면 더 많은 정보를 얻을 수 있다.

 

 

text는 문자열이다.

 

 

json() 함수로 열면 json 형식으로 출력된다. 위에서 말했던 것처럼 dictionary와 list로 이루어져있다.

그래서 dictionary와 list 다루는 것처럼 다루면 다음과 같이 깔끔하게 제목만 출력할 수 있다.

 

 

 

 

이번엔 이미지를 크롤링 할 생각이다

블로그와 마찬가지로 이미지로 들어가 참고해서 쓰면 된다.

 

url에서 blog를 image로 바꿨고, 대충 start와 display도 기입했다. display는 20개를 보여준다는 뜻이다.

여기서 이미지는 link나 thumbnail에서 받아오면 된다.

 

 

대충 파일 함수를 사용해서 저장하면 된다. 파일 함수 관련되서는 다음에 정리할까싶다.

해당 파일이 존재하는 폴더를 뒤져보면 크롤링한 이미지가 저장되어있는 것을 볼 수 있다.