Always awake,

[1탄] 쉽게 따라하는 네이버 뉴스 크롤링(python) - 계획 짜기 본문

코딩

[1탄] 쉽게 따라하는 네이버 뉴스 크롤링(python) - 계획 짜기

호재 P.B 2020. 8. 30. 00:28

" 본 포스팅은 네이버 웹 크롤링 수행계획을 짜는 1탄입니다.

실제 python 코드를 확인하기를 원하시는 분들은 아래 링크(2탄)을 참고해주세요 :)"

네이버 뉴스 웹 페이지 구성이 바뀌어 수정(2021.01.26)

 

 

쉽게 따라하는 네이버 뉴스 크롤링(python) - 2탄

지난 편에 이어 네이버 뉴스를 크롤링하는 python 코드를 작성하는 포스팅을 합니다. 지난 편은 네이버 뉴스 웹 구성 체계를 확인하여 원하는 정보(뉴스 기사 title, URL)의 위치를 확인하여 크롤링 �

everyday-tech.tistory.com

데이터 분석을 공부하면서 python의 여러 패키지를 툴로 사용하였고

그 중 데이터 수집 단계에서 사용되는 크롤링에 대해서 알게 되었습니다.

 

크롤링(crawling)은 단어 그대로 해석하면 밑바닥까지 긁어온다는 뜻인데 고기잡이 어선의 그물망 작업에서 유래한 단어라고 알고 있습니다.

 

그래서 본 포스팅의 주제인 웹 크롤링은 우리가 웹상에서 보는 정보들(텍스트, URL, 사진 정보 등)을 긁어오는 작업이라고 이해하시면 될 것 같습니다.

 

그 중 키워드와 원하는 뉴스기사의 수를 입력해서 관련 네이버 뉴스를 자동으로 엑셀파일로 저장하는 것을 python으로 구현해보려고 합니다.

 

결과물은 단순히 뉴스 title과 URL을 저장한 엑셀 파일을 만드는 코드이지만

 

더 발전시킨다면 뉴스 본문도 가져올 수 있으며, 

매일 주기적으로 해당 키워드에 대한 뉴스를 수집하고 이를 분석한다면(텍스트 마이닝, 빈도 분석 등) 좋은 인사이트를 얻기 위한 기반 데이터가 되지 않을까 싶습니다.

 

간략 설명

  • input : 검색할 키워드, 추출할 뉴스 기사 수
  • process : 웹 크롤링 알고리즘(python)
  • output : 뉴스 title, URL 담긴 엑셀 파일

서론

 

그럼 해당 코드를 구현하기 위해선 우리는 다음 사항을 고려해야합니다.

  1. 어떤 기술을 활용할 것인가? 정보를 가져오기 위해서 사용할 기술은 웹 크롤링입니다.
  2. 적용 대상은 무엇인가? 크롤링을 적용하여 데이터를 가져올 소스를 의미합니다(어떤 곳에서 정보들을 가져올 것인지)

 

<네이버 뉴스 웹 크롤링 시 고려할 사항>

 

활용기술

- 웹크롤링에도 여러 패키지가 있습니다. python에서 기본으로 제공하는 requests 패키지나 최근에 가장 많이 사용하는 bs4 패키지의 BeautifulSoup 모듈 등이 있습니다.

 

적용 대상

- 적용 대상을 정할 때 웹 구성 체계가 어떻게 되어 있는지 먼저 파악하는 것이 중요합니다.

- 제공하는 정보가 무엇인지

- 어떤 태그에 속해있는지

- 동적 크롤링이 필요한지

 

그렇다면 각 수행 단계와 수행해야할 사항에 대해 작성하면 다음과 같습니다.

 

STEP 1. 소스 조사

  1. 제공 사이트 조사
  2. 제공 정보 조사
  3. 확보 가능 정보 확인

STEP 2. 웹 구성 체계 확인

  1. HTML 구조 확인
  2. 제공 정보 확인
  3. 크롤링 가능 여부 확인

STEP 3. 크롤링 진행

  1. parsing 방안 및 위치 확인
  2. request 방법 확인
  3. data 저장 형태 설계

STEP 4. 최종 데이터 생성

  1. 데이터 저장 형태
  2. 데이터 저장

본론

그럼 위에서 소개한 4가지 step 별로 프로젝트를 진행해보겠습니다.

(본 포스팅은 STEP 2. 웹 구성 체계 까지만 작성되어 있습니다. 나머지 내용은 2탄을 참고해주시면 감사하겠습니다 :))

 

STEP 1. 소스 조사

제공 사이트로 네이버 뉴스를 활용하기로 하여 네이버 뉴스 검색 시 어떤 조건으로 검색되는지 확인해보았습니다.

 

아래 그림의 보라색 글씨 부분이 네이버 뉴스 DB에서 뉴스 검색 시 사용되는 조건문의 형태로 확인됩니다.

 

 

<검색 시 추가되는 조건절(네이버 뉴스)>

 

 

이해가 쉽도록 도식화하면 아래 그림과 같습니다.

 

우리가 네이버 뉴스에 접속하고 키워드를 검색하면,

네이버 뉴스 기본 URL 뒤에 조건절이 붙게 됩니다.

 

이것을 네이버 서버가 처리하여 조건에 맞는 뉴스를 HTML 형태로 반환하게 되고

웹 브라우저에서 우리가 알아보기 쉽게 UI/UX를 적용하여 인터페이싱 하는 것입니다.

 

실제 네이버 뉴스를 사용하는 유저는 인터페이싱된 결과만 보고 네이버 뉴스 서비스를 사용하면 되는 것이죠.

 

<네이버 뉴스 검색 시 처리 순서>

 

 

 

 

STEP 2. 웹 구성 체계 확인

이제 본격적으로 우리가 원하는 정보를 HTML 코드 안에서 어느 위치에 있는지 찾아보겠습니다.

 

우리가 원하는 정보는

  • 뉴스 기사 title
  • 뉴스 기사 URL 입니다.

원하는 정보의 HTML 코드 위치 찾기

   - 크롬(Chrome) 사용 시 원하는 정보에 커서를 댄 후 > 우클릭 > 검사

       * Tip : HTML 태그에 마우스를 대면 웹 페이지에서 해당 정보의 위치가 파란색으로 표시된다.

 

이 방법으로 뉴스 기사에 우클릭해서 HTML 소스 코드를 검사해본 결과 뉴스 기사들이 모여있는 바운딩 박스를 찾을 수 있었습니다.

각 뉴스기사들은 우리가 보고 있는 페이지의 어떤 table 안에 관리되고 있었습니다.

 

  • 뉴스 기사들이 모여있는 바운딩 박스 : ul 태그 이며 class 속성값이 "list_news"
    • 이 태그 하위에 뉴스 기사가 각각 들어 있었습니다.

< 해당 웹 페이지에 보이는 뉴스 기사들을 담고 있는 테그 >

 

아래 태그로 내려가서 각 뉴스 기사에 대한 바운딩 박스를 발견하였습니다. 각 뉴스 개별적으로 존재하는 태그입니다.

  • 뉴스기사를 감싸고 있는 바운딩 박스 : li 태그 이며 id 속성값이 “sp_nws”로 시작
    • 각 뉴스마다 id 속성값인 sp_nws 뒷 부분 숫자가 바뀌므로 일반화 조건 검색이 필요할 듯 합니다.
    • (해보진 않았지만 class 속성값을 "bx"로 설정해서 추출해도 될 것 같습니다; 추출하려는 뉴스 기사 태그 이외에 이런 조건이 있는 태그가 존재하지 않는다면 )

< 각 뉴스의 태그 >

 

그 다음 뉴스 기사 내부의 제목, URL, 본문의 일부를 담고 있는 태그를 찾아보았습니다.

위에서 말한 뉴스 기사 바운딩 박스(li 태그) 하위의 div 태그이며 class 속성값이 "news_area"

< 뉴스 본문에 대한 태그 >

 

그리고 위에서 찾은 div 태그 하위에 최종적으로 우리가 얻고 싶은 뉴스 기사의 title, URL 정보가 담겨 있는 a 태그가 있습니다.

a 태그이며 class 속성값이 "new_tit"

 

해당 태그까지 잘 찾아왔다면 이제 우리가 원하는 title, URL을 해당 태그에서 추출하면 됩니다.

위에서 찾은 a 태그 내부에 title, URL이 속성값으로 되어 있으므로 해당 속성값을 추출합니다.

  • 뉴스 기사 title : title 속성 값
  • 뉴스 기사 URL : href 속성 값

< title, URL을 담고 있는 태그 >

 

위에서 각 정보의 위치와 해당 태그의 위치를 다소 복잡하게 설명하였는데 최종 정리하면 다음과 같습니다.

< 네이버 뉴스의 각 뉴스 기사 title, URL 을 찾아가는 태그(경로) >

우리는 이제 이 순서대로 태그를 parsing해서 여러 뉴스 기사의 title, URL을 추출하는 코드를 작성하기만 하면 됩니다!

해당 내용은 아래 포스팅(2탄)을 참고해주시면 감사하겠습니다 :)

 


마무리하며

이해가 쉽도록 다소 긴 글로 작성하였습니다. 

피드백은 언제나 환영입니다.

감사합니다.

 

 

글이 도움이 되셨다면 아래 클릭 한번 부탁드립니다 :)

 

반응형