본문 바로가기
개발/Python

[py] 네이버 뉴스 타이틀, url 크롤링

by 코딩하는 갓디노 2022. 8. 7.

[py] 네이버 뉴스 타이틀, url 크롤링

 

네이버 뉴스의 특정 검색어를
여러페이지에 걸쳐 제목과 링크를 
크롤링합니다. 

 

예제는 스타트 코딩, 파이썬 크롤링 강의를 들으면서 공부한 내용입니다.

 

인터넷 주소 형식

출처: 스타트코딩 유튜브

 

  • Protocol - Domain - Path - Parameter
  • Protocol : 더블 슬래쉬 전, http 또는 https
  • Doamin: 더블 슬래쉬와 다음 슬래쉬 사이 구간, ip주소에 이름을 준것
  • Path: 다음 슬래쉬와 물음표 사이 구간, 서버에서 해당 페이지의 경로
  • Parameter: 물음표 뒤 구간, 크롤링에서 가장 중요한 부분, key와 value로 구성, &로 구분
  • 검색어를 입력 받은 뒤 query={입력어}를 변경해주면 됨

 

라이브러리 설치 확인

pip list

 

beautifulsoup4 , requests 패키지 설치

 

Requests

  • HTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리
  • request.get('사이트 url').text 로 얻는 html 코드는 string이라 크롤링하기에 어려워 beautifulsoup이라는 라이브러리를 이용해 쉽게 태그에 접근 가능

 

BeautifulSoup

  • 웹 페이지의 정보를 쉽게 스크랩할 수 있는 기능을 제공하는 라이브러리
#window
pip install beautifulsoup4 또는 bs4
pip install requests
#mac
pip3 install beautifulsoup4
pip3 install requests

 

Pyautogui

  • 마우스, 키보드 매크로 라이브러리
  • 간단한 입력창 띄우기
#window
pip install pyautogui 
#mac
pip3 install pyautogui

 

네이버 뉴스 타이틀, url 크롤링 코드

  • 네이버 뉴스에서 원하는 키워드에 관련된 기사 제목을 추출할때 사용합니다. 
  • soup.selectOne('선택자'): 선택된 제일 첫번째 태그 한개만 가져옴
  • soup.select('선택자'): 선택되는 모든 태그 리스트를 가져옴
  • link.attrs['href']: () 중가로가 아닌 대가로 안에 속성 넣음
  • query={keyword} 의 keywor는 검색어
  • start={i} 의 i는 페이지 수
  • 1페이지 -> start=1, 2페이지 -> start=11, 3페이지 -> start=21, ..., 10페이지 -> start=91
  • for i in range(1, int(lastPage) * 10, 10): 의 경우 1, 11, 21, 31, .... 의 순
import requests 
from bs4 import BeautifulSoup
import pyautogui

keyword = pyautogui.prompt('검색어를 입력하세요.')
lastPage = pyautogui.prompt('마지막 페이지 번호를 입력하세요.')
pageNum = 1
for i in range(1, int(lastPage) * 10, 10): #int형으로 lagePage 형변환
    print(f'{pageNum} 페이지 -----------------------------------')
    response = requests.get(f'https://search.naver.com/search.naver?where=news&sm=tab_jum&query={keyword}&start={i}')
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')

    links = soup.select('.news_tit')
    for link in links:
        title = link.text
        url = link.attrs['href']
        print(title, url)
    pageNum = pageNum + 1

 

 

요즘 가장 인기있는 드라마, 우영우를 키워드로 검색해보겠습니다. 

 

 

3페이지까지의 우영우에 관련된 기사 제목과 기사 url을 추출해보겠습니다.

 

 

이렇게 키워드를 넣고 원하는 마지막 페이지를 입력해 관련 정보를 크롤링해보았습니다. 

반응형

댓글