본문 바로가기

Python/웹크롤링 기초

pyautogui, for문을 이용해 원하는 페이지만큼 크롤링 하기 - 뉴스기사 가져오기 예제 2️⃣

이번 예제는 검색어를 입력하고, 원하는 페이지까지 크롤링하는 것이다.

먼저 네이버에 이강인으로 검색하고, 뉴스탭에서 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 페이지의 결과이다. 제목과 링크 실제 화면과 동일한 것을 볼 수 있다.