본문 바로가기

BLOG/웹크롤링

[웹크롤링] 네이버 - 페이지 자동으로 넘기는 방법

네이버 홈페이지에서 검색어를 입력한 뒤, '뉴스' 탭에서 뉴스 기사 제목들을 크롤링할 때 한 페이지 당 10개의 기사가 나오는데요, 페이지를 넘기지 않는다면 10개까지밖에 크롤링이 되지 않습니다.

 

따라서 자동으로 페이지를 넘기고, 다시 기사 제목을 크롤링해야 하는데요, 코드를 어떻게 입력해야 페이지를 자동으로 넘길 수 있을까요?

 

해답은 바로, url 주소에 있는데요, 

예를 들어, 네이버 검색창에 '여행'이라고 검색한 다음 뉴스 탭을 누르면 나오는 첫 페이지의 주소가 다음과 같습니다.

 

https://search.naver.com/search.naver?where=news&sm=tab_jum&query=여행

 

한편, 두 번째 페이지와 세 번째 페이지를 각각 누른 뒤에 주소는 아래와 같이 나오게 됩니다.

 

https://search.naver.com/search.naver?&where=news&query=여행&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:r,p:all,a:all&mynews=0&cluster_rank=23&start=11&refresh_start=0
https://search.naver.com/search.naver?&where=news&query=여행&sm=tab_pge&sort=0&photo=0&field=0&reporter_article=&pd=0&ds=&de=&docid=&nso=so:r,p:all,a:all&mynews=0&cluster_rank=48&start=21&refresh_start=0



이 두 url 차이는 바로 뒷 부분인 'start=' 에서 다른데요, 두번째 페이지에서는 start=11, 세번째 페이지에서는 start=21 이라고 주소가 설정되어 있습니다. 이는 한 페이지당 뉴스 기사가 10개 이므로 두 번째 페이지에서는 11번째 기사부터 시작하고, 세 번째 페이지에서는 21번째 기사부터 시작하니 해당 주소정보가 그렇게 나와있는 것입니다.

다시 돌아가서, 첫 페이지의 주소가 간결한데요, 두 번째 페이지의 url 에서 start=1 로 바꾸면 동일하게 첫 페이지로 나온답니다. 따라서 이러한 url의 형태를 이용하여 주소를 설정해주면 다음 페이지로 넘어가는 기능과 같아집니다.

 


그렇다면, 만약 '여행'을 키워드로 10페이지까지 뉴스기사를 크롤링하고 싶다면 아래와 같이 코드를 작성하시면 됩니다.


url = "https://search.naver.com/search.naver?" 

pages = ['1','11','21','31','41','51','61','71','81','91'] #start =  에 들어가는 부분
query_txt = "여행"

for page in pages :
    params = {
        'where' : 'news',  #뉴스 탭
        'query' : query_txt,
        'sm' : 'tab_jum',
        'start' : page    #여기서 페이지를 지정해줍니다.
    }
    
    resp = requests.get(url,params)
    soup = BeautifulSoup(resp.content, 'lxml') #본문 html 가져오기
    
    # 수행할 명령어 - 

 

앞에 pages = ['1','11','21','31','41','51','61','71','81','91'] 라는 리스트를 만들어주고, url의 start= 부분에 해당 데이터가 하나씩 들어가도록 해줍니다.(딕셔너리 형태의 params 변수에 저장)

 

그리고 for문 맨 마지막에 기사 제목을 크롤링하는 코드를 입력하고 실행하면, 10페이지에 해당하는 뉴스기사가 모두 크롤링된 것을 확인할 수 있습니다.