먼저 이 전 내용을 확인해주세요.

2020/03/12 - [분류 전체보기] - 파이썬 크롤링 따라하기 - 네이버 검색결과(feat. BeautifulSoup)

2020/03/15 - [분류 전체보기] - 파이썬 크롤링 따라하기 - 네이버 검색결과2(feat. BeautifulSoup)

 

지난시간에는 검색결과를 입력받고 출력을 해보았는데,

이번에는 한단계 업그레이드 되었습니다.

 

여러 페이지의 검색결과를 쭉 출력할 수 있는 방법을 알려드릴께요.

강의를 만들어주신 김플님께 다시 한 번 감사드려요.

 

여러 페이지 크롤링을 위해선 네이버의 검색결과 페이지의 규칙을 확인해야 되요.

 

파이썬으로 검색한 블로그 결과에요.

자세히 보시면 맨 마지막에 숫자가 1, 11, 21로 끝나는 것을 알 수 있어요.

 

검색결과 1페이지

https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC&sm=tab_pge&srchby=all&st=sim&where=post&start=1

 

검색결과 2페이지

https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC&sm=tab_pge&srchby=all&st=sim&where=post&start=11

 

검색결과 3페이지

https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC&sm=tab_pge&srchby=all&st=sim&where=post&start=21

 

규칙은 1로 시작하여, 한 페이지가 넘어갈때마다 10씩 더해주는 구조에요.

만약 5페이지라면 41이라는 숫자가 뒤에 붙겠죠?

 

기존에는 baseUrl과 plusUrl을 합쳐서 Url이 구성되었는데,

지금은 baseUrl을 지워도 될 것 같아요.

 

urllib.parse.quote_plus를 plusUrl로 옮겨줄거에요.

이러면 입력된 검색어는 인코딩 이슈 없이 입력받을 수 있어요.

 

또, 아까 페이지 규칙을 활용하여, pageNum이라는 변수를 정의했어요.

첫 페이지가 1페이지니, 1부터 시작할거에요.

 

url에는 f라고 변수를 정의해주고,

검색어 값에 {plusUrl} 넣으면, 입력받은 주소가 여기에 들어가고, 마지막에 {pageNum} 입력했으니,

아까 정의된 pageNum이 1로 될꺼에요.

# baseUrl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='
plusUrl = urllib.parse.quote_plus(input('검색어를 입력해주세요 :'))

pageNum = 1
url = f'https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso\
    =&post_blogurl=&post_blogurl_without=&query={plusUrl}&sm=tab_pge&srchby=all&st=sim&where=post&start={pageNum}'

print(url)

 

반복문을 할때,

for문도 있지만 이번엔 while 사용할 거에요.

 

pageNum이 lastPage +1 보다 작을때까지 반복하는데

title 및 url을 출력해주고,

pageNum을 10 더해서 다시 2페이지를 가져오고.. 이를 반복해서 출력하라는 이야기에요.

 

count를 1을 더해주는건 "몇페이지 결과입니다" 부분에 숫자를 넣기 위함이에요.

 

자 완성된 코드입니다.

#네이버 검색결과 여러 페이지 가져오기
import urllib.request
import urllib.parse
from bs4 import BeautifulSoup

# baseUrl = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='
plusUrl = urllib.parse.quote_plus(input('검색어를 입력해주세요 :'))

pageNum = 1
count = 1

i = input('몇페이지까지 크롤링 할까요? :')

lastPage = int(i) * 10 - 9
while pageNum < lastPage + 1:
    url = f'https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1' \
          f'&nso=&post_blogurl=&post_blogurl_without=&query=' \
          f'{plusUrl}&sm=tab_pge&srchby=all&st=sim&where=post&start={pageNum}'

    html = urllib.request.urlopen(url).read()
    soup = BeautifulSoup(html, 'html.parser')

    title = soup.find_all(class_='sh_blog_title')

    print(f'----{count}페이지 결과입니다---')
    print()

    for i in title:
        print(i.attrs['title'])
        print(i.attrs['href'])
        print()

    pageNum += 10
    count += 1



  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기