728x90
반응형
이번 예제는 검색어를 입력하고, 원하는 페이지까지 크롤링하는 것이다.
먼저 네이버에 이강인으로 검색하고, 뉴스탭에서 url이 어떻게 변화하는지 확인한다.
https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%9D%B4%EA%B0%95%EC%9D%B8
https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%9D%B4%EA%B0%95%EC%9D%B8&start=11
https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EC%9D%B4%EA%B0%95%EC%9D%B8&start=21
여기서 보면 start=11, start=21이 url의 규칙이다.
이 파라미터값은 페이지가 넘어갈 때마다 바뀌기 때문에 for문을 이용해 반복하여 원하는 페이지 만큼 크롤링 할 수 있다.
import requests
from bs4 import BeautifulSoup
import pyautogui
searchParam = pyautogui.prompt("검색어를 입력하세요")
searchPage = pyautogui.prompt("마지막 페이지 번호를 입력해 주세요")
page=1
for startPageNum in range(1,int(searchPage)*10,10):
print(f"== {page} 페이지 ==")
response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={searchParam}&start={startPageNum}")
htmlText = response.text
soup = BeautifulSoup(htmlText,'html.parser')
links = soup.select(".news_tit")
for link in links:
print("________")
title = link.text
url = link.attrs['href']
print(title)
print(url)
page+=1
pyautogui의 prompt를 통해 '이강인', '3'페이지를 입력한다.
response = requests.get(f"https://search.naver.com/search.naver?where=news&sm=tab_jum&query={searchParam}&start={startPageNum}")
htmlText = response.text
soup = BeautifulSoup(htmlText,'html.parser')
links = soup.select(".news_tit")
소스에서 보면 searchParam으로 이강인과 startPageNum으로 페이지를 조회하여 해당하는 페이지 html들을 가져왔다.
그리고 BeautifulSoup으로 html을 파싱하고, .news_tit를 선택자로 하여 뉴스의 모든링크들을 가져온다.
.select는 .news_tit에 해당하는 모든 것을 가져오기 때문에 리스트형태로 links변수에 담긴다.
1~3 페이지의 결과이다. 제목과 링크 실제 화면과 동일한 것을 볼 수 있다.
728x90
반응형
'개발 이모저모' 카테고리의 다른 글
URI 컨트롤 , API 설계하기 (4) | 2024.12.19 |
---|---|
코드 품질 (0) | 2023.06.20 |
pyautogui , fstring을 이용한 크롤링 - 뉴스기사 가져오기 예제 1️⃣ (0) | 2022.12.07 |
Beautifulsoup이란 (0) | 2022.12.06 |
python requests 라이브러리 (1) | 2022.11.15 |