네이버에 강아지를 검색했을 때 나오는 창
네이버에 강아지를 입력하면 위와 같은 결과를 얻을 수 있습니다. 이를 python3를 이용하여 결과를 얻으려고 하면 url을 제대로 입력해주어야 합니다. 크롬에 보이는 url과 실제 해당 url을 복사한 값은 아래와 같습니다.
# 크롬에서 보이는 url
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=강아지
# 클립보드에 복사된 url
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EA%B0%95%EC%95%84%EC%A7%80
한글은 url에 직접 사용될 수 없기 때문에, 실제로는 UTF-8로 변형해서 사용해주어야 합니다. 이 때, urlopen() 함수를 통하여 url 을 호출할 때, 위의 두 url 모두 에러가 뜨게 됩니다. 한글의 경우에는 python3에서는 quote 함수를 이용하여 간단하게 인코딩 할 수 있습니다.
from urllib.parse import quote
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=' + quote("강아지")
content = urlopen(url).read()
result = BeautifulSoup(content, "html.parser")
위와 같이 한글을 quote() 함수로 감싸주게 되면 이상 없이 요청을 처리할 수 있게 됩니다.