brunch

You can make anything
by writing

C.S.Lewis

by Moai Nov 28. 2020

구글 뉴스 크롤러

Google News Crawling

파이썬 언어는 마이크로 서비스를 구현하기에 정말 좋은 언어이다. 가벼운 목표를 잡고 프로젝트 성으로 구현하기 최적의 언어로 보인다.


이번엔 구글 뉴스를 주기적으로 크롤링하는 코드를 구현해보려고 한다.


처음엔 네이버나 다음 뉴스를 가져오려고 했으나 중복되는 뉴스도 많고 가장 큰 문제로 무료로 제공하는 API를 찾기가 쉽지 않았다. API란 서비스를 쉽게 이용할 수 있도록 제공하는 기능을 말한다.

그나마 구글이 제일 간단하고 내용도 괜찮아 보였다.


우리는 지금까지 웹페이지에서 개발자 도구를 이용해 백엔드 서비스를 후킹해서 사용했다. 웹서비스는 처음 페이지를 보여줄 때 서버에서 모든 데이터를 다 가져와서 보여주는 방법과 동적으로 사용자의 이벤트를 받아 그때마다 정보를 가져와 보여주는 방법이 있다.


개발자도구를 이용하면 동적으로 가져오는 정보를 확인할 수 있다. 아래 브런치 글에서 후킹(공식적인 방법이 아닌 API를 몰래 이용)하여 가져오는 방법을 설명했다.

https://brunch.co.kr/@moaikim/37



이번에는 공식적인 방식을 이용해서 구글 뉴스를 크롤링해보자. 구글 뉴스는 아래 링크에서 조회가 가능하다. https://news.google.com/search?q=hacker

q의 파라미터를 다른 값으로 변경하면 다른 뉴스정보도 가져올 수 있다. 링크에 들어가면 구글이 알아서 검색어에 대한 주요 뉴스만 추출한 뒤 보여준다. 좀 오래된 뉴스도 포함되어 있는데 최대 1일에 대한 뉴스만 보고 싶다면 어떻게 해야할까?


https://news.google.com/search?q=hacker+when:1d

위 링크처럼 주소 끝에 +when:1d를 붙여주면 된다. 참고로 한국에 대한 검색 결과가 아닌 글로벌 기준으로 가져오려면 추가적으로 &hl=en-NG&gl=NG&ceid=NG:en를 뒤에 붙여주면 된다.


그런데 위 주소는 이미지파일도 포함되어 있고 html파일로 결과를 받게 된다. 이 데이터를 파싱하려면 매우 곤혹일 것이다. 구글에서는 rss 방식으로 새로운 글에 대해 데이터만 피드해주는 기능을 제공한다.


링크는 위 주소 중간에 rss만 넣어주면 된다.

https://news.google.com/rss/search?q=hacker+when:1d


데이터를 보면 알겠지만 JSON형식이 아니다. 하지만 파이썬에서 JSON처럼 데이터를 쉽게 참조할 수 있는 모듈을 제공한다. 바로 파이썬의 feedparser 모듈이다. 이 모듈을 이용해 데이터를 가져온 뒤 파싱하고 디비에 저장해보자.





이전과 동일하게 마이크로 서비스 단위로 개발, 관리하기 위해 리눅스의 크론탭 대신 python의 apscheduler 크론탭 라이브러리를 이용하고 DB는 sqlite를 사용했다.


크롤링 정보는 구글에서 특정 키워드에 매칭되는 최근 1일 뉴스 정보를 가져오는 것으로 테스트했다. 구글 뉴스를 디비에 저장함과 동시에 키워드도 함께 keyword테이블에 저장하도록 했다.


python main.py -h를 통해 도움말을 확인할 수 있다.


https://gist.github.com/moaikim/bfc0ae4d19e0b463cb24da44f0c72faf


매거진의 이전글 Sqlite와 Crontab 응용
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari