프로그래밍

[파이썬] 네이버 뉴스 페이지 웹 크롤링 - 텍스트, 링크, 이미지

플러그앤플레이 2024. 12. 21. 22:31

저번 시간에 이어 실제로 네이버 뉴스 페이지를 웹 크롤링해 텍스트와 링크, 이미지를 가져오는 방법을 함께 해봅시다.

 

웹 크롤링의 단계를 간단하게 말하면,
1. 원하는 웹 페이지의 html문서를 싹 긁어온다.  ☞ requests
2. 긁어온 html 문서를 파싱(Parsing)한다.  ☞  BeautifulSoup
3. 파싱 한 html 문서에서 원하는 것을 골라서 사용한다. ☞ find, select

 

여기에 한발 더 나아가서

+ 텍스트, 링크, 이미지를 가져온다. ☞ get_text, attrs['href'], attrs['src']

저번 글에서의 기본적인 크롤링을 이해하셨다면 이번도 잘 따라오실 수 있을 겁니다.

 

▶ 순서 
1. 가져올 페이지 분석하기
2. get_text로 텍스트 가져오기
3. attr['href']로 링크 가져오기
4. attr['srcf']로 이미지 가져오기

 


1. 가져올 페이지 분석하기

 

'비트코인'이라는 검색어로 네이버-뉴스 검색하시면 다음과 같이 나옵니다.

주소줄의 주소는 다음과 같이 끝에 검색어가 들어갑니다.

https://search.naver.com/search.naver?where=news&sm=tab_jum&query=비트코인

네이버 뉴스 검색 화면
네이버 뉴스 검색 화면

개발자 모드로 들어가 줍니다.(단축키 : F12)

개발자 도구 F12
개발자 도구 F12

 


2. get_text로 텍스트 가져오기

 

관리자 도구의 화살표 아이콘을 누르고 왼쪽의 첫 번째 기사의 제목 부분을 클릭합니다.

제목이 선택되고 HTML 코드의 해당 코드로 자동 이동됩니다. 

기사 제목에 대한 HTML 확인
기사 제목에 대한 HTML 확인

 

여기서 집중!

잘 보시면 제목 부분의 코드는 <a> 태그로 감싸줘 있습니다.

<a href="..."> 로 시작합니다. 이건 하이퍼링크가 되겠고

class="a.news_fit" 이라 클래스 이름이 나오고

target="_blank" 이건 클릭 시 새창으로 여는 옵션입니다.

onClick="..."> 이건 클릭시 실행될 함수를 정의한 거고요

title="숨 고르는..."> 마지막으로 제목(타이틀)입니다.

 

클래스 이름으로 원하는 부분을 뽑아내기 위해 선택자(css selector)를 사용합니다.

여기서는 제목의 선택자는 a.news_fit 입니다.

이 페이지의 뉴스 기사 제목 모두가 똑같게 돼있으니 확인해 보세요

 

select 함수와 for문 .get_text() 함수를 이용해서 다음과 같이 코딩해 줍니다.

제목 부분 추출 코딩
제목 부분 추출 코딩

 

실행 결과 표출
실행 결과 표출

 

결과를 살펴보면 10개의 제목을 잘 뽑아왔습니다.

그런데 왜 10개일까요? 네이버 뉴스에 검색된 결과가 10개만 나오는 걸까요?

아니면 select 함수가 10개만 가져올까요?

 

select함수는 일치하는 모두를 찾아오는 함수입니다.

(참고로 select_one 도 있는데 이것은 처음 찾은 것만 반환해 줍니다.)

 

네이버 뉴스 화면을 확인해 보시면 10개가 처음화면에서 나오고

스크롤을 내리면 다시 로딩되어 10개가 추가되고, 다시 추가되고...

이렇게 계속 이벤트에 변화되는 동적페이지였습니다.

모든 결과를 다 가져오시려면 동적페이지 웹 크롤링이 필요합니다.

 

이번 글은 정적페이지의 웹 크롤링이므로 지금까지 대성공입니다.

 

축하드립니다.

 


2. attr['href']로 링크 가져오기

 

이제 각 기사의 실제 페이지로 연결되는 링크도 가져와 볼 건데요. 

기사 제목 부분 HTML
기사 제목 부분 HTML

 

앞서 본 관리자도구의 HTML을 보시면 href는 <a> 태그 안에 있어

이전에 작업한 news_titles 변수에 함께 저장되어 있으므로

바로 이어서 for 문을 써서 추출합니다.

이전 코딩에 이어 밑에 다음과 같이 코딩해 줍니다.

링크 추출 코드
링크 추출 코드

 

링크 추출 실행
링크 추출 실행

 

기사의 실제 페이지 링크를 잘 추출되었습니다.  대성공입니다.

 

축하드립니다.


3. attr['srcf']로 이미지 가져오기

 

이제 기사 오른쪽에 썸네일이 있는데 저 것도 크롤링해봅시다.

 

뉴스 검색화면에서 보시면 기사당 하나의 썸네일 이미지가 보입니다.

저 썸네일의 HTML으로 보시면 <div class="news_contents"> 안의

<a> 태그 안에 <img src="..">로 되어 있습니다만...

네이버 검색 화면 썸네일
네이버 검색 화면 썸네일

 

 

여기서는 이미지 주소가 보호되어 직접적으로 노출 방지 작업되어 있습니다.

이미지 서버를 캐싱 URL 방식으로 변환되어 이걸 해석하려면 많은 변환을 거쳐야 합니다.

굳이 이렇게 복잡하게 숨겨진 주소를 가져오려고 애쓰지 않는 게 정신건강에 좋을 거 같아요

 

결론적으로 네이버 뉴스에서 썸네일을 크롤링 하긴 어렵다입니다.

 


마치며

 

지금까지 정적 페이지 웹 크롤링 실전 편으로 네이버 뉴스의 검색화면에서

제목, 링크, 이미지를 추출해 보았습니다. 이제 어떻게 하는지 감 잡으셨을 겁니다.

 

다음은 동적 웹페이지를 Selenium을 이용해서 크롤링해 보도록 하겠습니다. 

 

감사합니다.