정구리의 우주정복
Python 웹크롤링 (Web Crawling) 01. 네이버 검색결과 크롤러 만들기 (2) 본문
오늘은 콘솔창에 검색을 하면 자동으로 네이버 블로그 결과를 가져오는 걸 만들어볼거다
구상도
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 로 한번 찍어봤음
이제 밑에 주석을 모두 지워주고 실행을 하면
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 둘 다 사용 가능하다 !
그렇게하면 문제 해결 ! 결과가 잘 나오는 모습을 볼 수 있다.
이렇게 첫 웹 크롤러로 네이버 블로그 검색결과를 가져오는 크롤러를 만들어봤다
다음엔 뭘 만들어볼까