네이버 뉴스의 특정 검색어를
여러페이지에 걸쳐 제목과 링크를
크롤링합니다.
예제는 스타트 코딩, 파이썬 크롤링 강의를 들으면서 공부한 내용입니다.
인터넷 주소 형식
- 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을 추출해보겠습니다.
이렇게 키워드를 넣고 원하는 마지막 페이지를 입력해 관련 정보를 크롤링해보았습니다.
반응형
'개발 > Python' 카테고리의 다른 글
[py] 네이버 로그인 자동화 (ft. 셀레니움) (0) | 2022.09.25 |
---|---|
[py] 셀레니움 기본 설정 (0) | 2022.09.25 |
[py] 네이버 상품 목록 크롤링 해오기 (ft. 셀레니움, csv로 옮기기) (0) | 2022.09.25 |
[py] ModuleNotFoundError: No module named 'selenium' (0) | 2022.09.22 |
[py] 크롤링한 데이터 엑셀 저장, 수정 (65) | 2022.08.07 |
댓글