본문 바로가기
Python

[python] 네이버쇼핑 연관검색어 수정 버전 키워드 크롤링

by 퍼포먼스마케팅코더 2022. 8. 19.
반응형

python 네이버쇼핑 연관검색어 수정 버전 키워드 크롤링

이번 코딩 같은 경우에는 네이버 쇼핑 쪽에서 연관 검색어 키워드로 클로링 했었던 것을 파이썬이죠. 파이썬으로 했었던 거를 이전에 소개시켜드린 적이 있었는데 그게 오류가 있었습니다. 이걸 수정을 해서 다시 들고 왔어요. 세 가지가 있는데 기존과 똑같습니다. 이전 거 했었던 분들은 왜 갑자기 연관 검색어가 왜 이렇게 안 나와라는 게 있으실 거예요. 버전업을 해놨었기 때문에 정상적으로 오류 없이 나올 겁니다. 

python 네이버 쇼핑 자동완성어 추출

첫 번째로는 네이버 쇼핑 쪽에서 자동 완성어예요. 이 키워드를 입력을 해서 보시면 네이버 쇼핑 쪽에 검색 란에다가 키워드를 입력을 하면 밑에 자동 완성으로 뜨는 추천 키워드들 있지 않습니까? 그게 나올 거예요. 첫 번째는 그거이거고요.

 

import requests
from bs4 import BeautifulSoup
import json
import time
import re

#네이버 쇼핑 자동완성어 추출

search_keyword = '자석거치대' 

try :
    url = 'https://shopping.naver.com/api/modules/gnb/auto-complete?keyword=' + search_keyword
    headers = { 'Accept-Language' : 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,zh;q=0.5',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
                'Accept-Encoding': 'gzip'
    }

    response = requests.get(url, headers=headers)
    json_str = response.text
    keywords = json.loads(json_str)

    for kw in keywords['items'][1] : 
        related_keywords = kw[0][0]
        related_keywords = related_keywords.replace(" ", "")
        print(related_keywords)

except :
    print("네이버 쇼핑 자동완성어 추출 불가")
time.sleep(1)

 

python 네이버 쇼핑 연관검색어 PC 기준 추출

이 두 번째가 문제였는데 두 번째 문제가 뭐였냐면은 이 클래스 명이 접속을 할 때마다 계속 바뀝니다. 계속 바뀌더라고요 새로 로그인해서 들어가서 보면은 클래스 명이 바뀌기 때문에 그거를 찾을 수 있는 걸로 수정 코딩을 수정을 해놔서 파이썬으로 다시 한번 만들어 놨습니다. 밑에 에러 발생을 했었던 것에 따라서 어떻게 해결을 했는지 그게 나왔었고요 해서 확인했었던 결과로서는 정상적으로 나왔습니다. 이거는 네이버 pc 쪽에서 키워드를 검색을 하면 쇼핑 검색 결과 안에서 연관 검색어 있지 않습니까 연관 검색어의 리스트를 전부 다 가지고 오는 거예요. 두 번째는 pc 기준에서 연관 키워드들을 다 클로링해서 추출해오는 방식입니다.

import requests
from bs4 import BeautifulSoup
import json
import time
import re

search_keyword = '자석거치대' 


try :
    shop_rel_url = 'https://search.shopping.naver.com/search/all?query=' + str(search_keyword)

    headers = { 'Accept-Language' : 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,zh;q=0.5',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
                'Accept-Encoding': 'gzip'
    }  

    shop_rel_response = requests.get(shop_rel_url, headers=headers)
    shop_rel_soup = BeautifulSoup(shop_rel_response.text, 'lxml')

    h2_class_name = re.search('<div class="relatedTags_relation_(.+?)">', str(shop_rel_soup)).group()  #클래스명 정규식 표현으로 찾기
    h2_class_name_2 = re.search('"(.+?)"', str(h2_class_name)).group()  #클래스명 정규식 표현으로 찾기
    # expected string or bytes-like object 에러발생시
    # str(shop_rel_soup) str 문자열로 감싸면 된다. 
    h2_class_name_2 = h2_class_name_2.replace('"', '')
    #print(h2_class_name_2)

    shop_rel_words = shop_rel_soup.find('div' , {"class" : str(h2_class_name_2)})   #연관검색어란 가져오기

    shop_rel_words_list = shop_rel_words.find_all('a') #연관검색어 리스트 전부 가져오기

    for li in shop_rel_words_list : #보자
        print(li.text)

except :
    print("네이버 쇼핑 연관검색어 추출 불가")

 

 

python 네이버 쇼핑 연관 검색어 모바일 기준 추출

마지막으로 이 세 번째는 모바일 기준입니다. 근데 이 모바일 기준이 거의 pc랑 대동소이에요. 그렇게 뭐 크게 다르거나 뭐 그러지는 않습니다. 중복되어 있는 키워드들이 많을 수도 있는데 이 점을 이 점은 참작을 해서 보시면 될 것 같습니다. 여기까지입니다.

import requests
from bs4 import BeautifulSoup
import json
import time
import re

search_keyword = '자석거치대' 

#네이버 쇼핑 연관검색어 추출(모바일)

try :
    shop_recom_url = 'https://msearch.shopping.naver.com/search/all?query={}&frm=NVSHSRC&vertical=home'.format(search_keyword)

    headers = { 'Accept-Language' : 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6,zh;q=0.5',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
                'Accept-Encoding': 'gzip'
    }  

    shop_recom_response = requests.get(shop_recom_url, headers=headers)
    shop_recom_soup = BeautifulSoup(shop_recom_response.text, 'lxml')
    #print(shop_recom_soup)

    h2_class_name = re.search('<div class="relatedTag_scroll_area(.+?)">', str(shop_recom_soup)).group()  #클래스명 정규식 표현으로 찾기
    #print(h2_class_name)
    h2_class_name_2 = re.search('"(.+?)"', str(h2_class_name)).group()  #클래스명 정규식 표현으로 찾기
    # expected string or bytes-like object 에러발생시
    # str(shop_rel_soup) str 문자열로 감싸면 된다. 
    h2_class_name_2 = h2_class_name_2.replace('"', '')
    #print(h2_class_name_2)

    shop_recom_words = shop_recom_soup.find('div' , {"class" : str(h2_class_name_2)})   #연관검색어란 가져오기

    shop_recom_words_list = shop_recom_words.find_all('a') 

    for li in shop_recom_words_list :
        print(li.text)

except :
    print("네이버 쇼핑 추천키워드 추출 불가")

time.sleep(1)

 

반응형

댓글