저번 시간에 이어 실제로 네이버 뉴스 페이지를 웹 크롤링해 텍스트와 링크, 이미지를 가져오는 방법을 함께 해봅시다.
웹 크롤링의 단계를 간단하게 말하면,
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)
2. get_text로 텍스트 가져오기
관리자 도구의 화살표 아이콘을 누르고 왼쪽의 첫 번째 기사의 제목 부분을 클릭합니다.
제목이 선택되고 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을 보시면 href는 <a> 태그 안에 있어
이전에 작업한 news_titles 변수에 함께 저장되어 있으므로
바로 이어서 for 문을 써서 추출합니다.
이전 코딩에 이어 밑에 다음과 같이 코딩해 줍니다.
기사의 실제 페이지 링크를 잘 추출되었습니다. 대성공입니다.
축하드립니다.
3. attr['srcf']로 이미지 가져오기
이제 기사 오른쪽에 썸네일이 있는데 저 것도 크롤링해봅시다.
뉴스 검색화면에서 보시면 기사당 하나의 썸네일 이미지가 보입니다.
저 썸네일의 HTML으로 보시면 <div class="news_contents"> 안의
<a> 태그 안에 <img src="..">로 되어 있습니다만...
여기서는 이미지 주소가 보호되어 직접적으로 노출 방지 작업되어 있습니다.
이미지 서버를 캐싱 URL 방식으로 변환되어 이걸 해석하려면 많은 변환을 거쳐야 합니다.
굳이 이렇게 복잡하게 숨겨진 주소를 가져오려고 애쓰지 않는 게 정신건강에 좋을 거 같아요
결론적으로 네이버 뉴스에서 썸네일을 크롤링 하긴 어렵다입니다.
마치며
지금까지 정적 페이지 웹 크롤링 실전 편으로 네이버 뉴스의 검색화면에서
제목, 링크, 이미지를 추출해 보았습니다. 이제 어떻게 하는지 감 잡으셨을 겁니다.
다음은 동적 웹페이지를 Selenium을 이용해서 크롤링해 보도록 하겠습니다.
감사합니다.
'프로그래밍' 카테고리의 다른 글
[파이썬] 구글 트렌드 RSS 파싱 및 CSV 저장 방법 (8) | 2024.12.30 |
---|---|
[파이썬] 배포 호스팅을 위한 무료 파이썬 플랫폼 (55) | 2024.12.25 |
[파이썬] requests + BeautifulSoup 으로 웹 크롤링 하기 (7) | 2024.12.20 |
[파이썬] VS Code로 파이썬 개발을 위한 초기 설정 (6) | 2024.12.18 |
[파이썬] VS Code 설치하기 + 한글, 테마 변경 (6) | 2024.12.17 |