정구리의 우주정복

Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 만들기 (2) 본문

PYTHON/STUDY

Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 만들기 (2)

Jungry_ 2020. 3. 28. 15:10
반응형

오늘은 콘솔창에 검색을 하면 자동으로 네이버 블로그 결과를 가져오는 걸 만들어볼거다

 


구상도

1. search 변수를 만들어 검색어를 입력받기

2. url ((1) 참조) 맨 뒤 query 부분에 search 변수 합쳐주기

3. 짜잔 검색 두두둥 !


1. search 변수를 만들어 검색어를 입력받기

import urllib.request
from bs4 import BeautifulSoup
import ssl

context = ssl._create_unverified_context()

search = input("검색어를 입력하세요")
url = 'https://search.naver.com/search.naver?where=post&sm=tab_jum&query='+search
print(url)
#html = urllib.request.urlopen(url,context=context).read()
#soup = BeautifulSoup(html,'html.parser')
#
#title = soup.find_all(class_='sh_blog_title') 

#for i in title: #i는 title의 갯수 (네이버는 한 페이지에 10개를 보여줘서 i=10)
#    print(i.attrs['title']) #attrs = 속성
#    print(i.attrs['href'])
#    print('\n')

search 변수를 만들어주고 url 부분에 query = search  형태로 만들어줬다

잘 나오나 확인을 위해 print 로 한번 찍어봤음

 

보다싶이 url 이 아주 잘 만들어진다

이제 밑에 주석을 모두 지워주고 실행을 하면

 

UnicodeEncodeError: 'ascii' codec can't encode characters in position 46-48: ordinal not in range(128)

 

짜잔 이런 오류가 난다 UnicodeEncodeError 라는걸 보니 아마 한글로 입력한게 문제가 되었나보다 (search 값에 영어 값을 넣어주면 문제가 생기지 않음 )


해결을 해보자

 

좀 찾아보니 urllib 의 parse 를 사용해주면 해결이 가능하다고 한다 (url 인 경우의 해결법 , 다른때는 encode 를 해줘야하는 경우도 있음)

from urllib import parse (클릭시 parse에 대한 설명으로 이동)

 

최종 코드와 결과 모습

저번에 (1) 에서 url 을 보면

https://search.naver.com/search.naver?where=post&sm=tab_jum&query=%ED%8C%8C%EC%9D%B4%EC%8D%AC 
이런 형태의 URL 이였다 

그래서 마지막 쿼리 부분에 quary=파이썬 이렇게 입력이 들어가 오류가 발생하게 되는것이다 

 

원래 search 에 그냥 '파이썬' 값이 들어갔다면 parse.quote 를 통해 %ED%8C%8C%EC%9D%B4%EC%8D%AC 이런 형태로 변환을 해준다 

parse.quote , parse.quote_plus 둘 다 사용 가능하다 !

그렇게하면 문제 해결 ! 결과가 잘 나오는 모습을 볼 수 있다. 

 


이렇게 첫 웹 크롤러로 네이버 블로그 검색결과를 가져오는 크롤러를 만들어봤다

 

다음엔 뭘 만들어볼까

반응형
Comments