goodthings4me.tistory.com
11번가의 검색란 우측에 있는 키워드 롤링 부분을 클릭하면, 실시간 쇼핑 검색어 20개가 보인다. 이 부분에 대해 파이썬으로 스크래핑 후 csv 파일로 저장하는 소스코드와 Tkinter로 UI를 만들어 실행 파일로 생성하는 방법을 참고용으로 기록함.
파이썬 Tkinter로 11번가의 실시간 쇼핑 검색어 순위 추출 및 저장하기
파이썬 소스코드
from tkinter import *
import tkinter.messagebox as msgbox
import re
import webbrowser
import pyperclip
import requests
import json
from csv import *
root = Tk()
root.title('검색어 순위')
root.geometry('450x350+700+100')
root.resizable(False, False)
def popul_11st(popul_cnt):
# popul_cnt 순위 지정
popul_url = f'https://www.11st.co.kr/AutoCompleteAjaxAction.tmall?method=getKeywordRankJson&type=hot&isSSL=Y&rankCnt={popul_cnt}&callback=fetchSearchRanking'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
}
r1 = requests.get(popul_url)
if r1.status_code == 200:
r1.encoding = 'utf-8'
fr = r1.text.find('({')
to = r1.text.find('})')
r1_str = r1.text[fr + 1 : to + 1] # 슬라이스로 추출
dict_data = json.loads(r1_str)
search_cnt = 0
## 인기 검색어 상품을 csv로 저장
with open('11st_popul.csv', 'w', encoding='utf-8-sig', newline='') as f:
thewriter = writer(f) # csv.writer()
header = ['Rank', 'Keyword', 'SearchCount', 'Link']
thewriter.writerow(header)
for items in dict_data['items']:
print(f'{str(items["currentRank"]).zfill(2)}_{items["keyword"]}[{items["searchCount"]}] / {items["pcSearchLink"]}')
search_cnt += int(items["searchCount"])
product_link = items["pcSearchLink"]
link = f'=HYPERLINK("{product_link}", "{product_link}")' # 하이퍼링크 작업
info = [str(items["currentRank"]).zfill(2), items["keyword"], items["searchCount"], link]
thewriter.writerow(info)
return search_cnt
##### Tkinter Code #####
def func_quit():
root.destroy()
def copy_url():
print(lbl_result['text'], lbl_result.cget('text'))
pyperclip.copy(lbl_result['text'])
# print(lbl_result.text.get())
# 시작 버튼
def start():
## 입력란이 비었는지 확인함
val = txt_entry_url.get() # str로 넘어온다.(특수문자 포함)
# 숫자가 아닌 것 찾기(단, ''는 못 찾고 오류나서 예외처리함)
p = re.compile('\D')
match = p.search(val)
# print(match)
try:
if not match and int(val) > 0:
keyword_cnt = int(txt_entry_url.get())
state_var.set('실행중.....')
root.update_idletasks()
result = popul_11st(keyword_cnt) # 함수 호출
print(result)
if result:
res = f'* 인기 검색어 {keyword_cnt}개 [검색 합계 {result:,}건]이 csv 파일로 저장됨'
lbl_result.configure(text=res, font=('Arial', 9))
else:
lbl_result.configure(text='추출 실패, 입력된 숫자 확인 요망', font=('Arial', 9))
state_var.set('작업 완료..!!')
else:
msgbox.showwarning('Info', '숫자(양의 정수)를 입력하세요!')
return
except:
msgbox.showwarning('Info', '숫자(양의 정수)를 입력하세요!')
return
def read_me():
msgbox.showwarning('Info',
'본 프로그램은 11번가 쇼핑사이트에 의존적인 프로그램이기 때문에 사이트 UI가 변경되면 '
'실시간 검색어를 추출할 수 없습니다.\n\n'
'순위별 검색어, 검색수, 링크(URL)를 추출하고, 추출된 데이터는 프로그램이 있는 폴더에 csv 파일로 저장됩니다.\n')
def callback(url):
webbrowser.open_new(url)
# 제목 표시 row 들어갈 공간
lbl_use_frame = Frame(root)
lbl_use_frame.pack(fill='x', padx=2, pady=2)
txt_url = '11번가 인기 검색어 추출'
lbl_url_txt = Label(lbl_use_frame, text=txt_url, font=('Helveticabold', 11, 'bold'), justify='left', fg='blue')
lbl_url_txt.pack(side='left', fill='x', padx=7, pady=5, ipadx=1)
lbl_ad = Label(lbl_use_frame, padx=5, pady=5, text='[4u.ne.kr]', width=5, fg='blue', cursor='hand2')
lbl_ad.pack(side='right', padx=20, pady=5)
lbl_ad.bind('<Button-1>', lambda e: callback('http://4u.ne.kr/'))
# 값 입력(URL, 숫자) 설명 LabelFrame
url_frame = LabelFrame(root, text="")
url_frame.pack(fill="x", padx=10, pady=5, ipady=5)
# 입력 레이블
lbl_url = Label(url_frame, text='검색할 인기 검색어 숫자 입력(최대 200) :', width=30)
lbl_url.configure(font=('Arial', 10, 'bold'))
lbl_url.pack(side='left', padx=5, pady=5)
# 입력 란
txt_entry_url = Entry(url_frame)
txt_entry_url.config(width=10, justify='right')
txt_entry_url.insert(0, '20')
txt_entry_url.pack(side='left', fill='x', padx=8, pady=5, ipady=3)
# Read ME
btn_close = Button(url_frame, text='Read Me', width=10, fg='black', cursor='hand2', command=read_me)
btn_close.pack(side='right', padx=5, pady=5)
# 결과 출력 프레임
list_frame = Frame(root)
list_frame.pack(fill='both', padx=10, pady=5)
# 결과 출력
lbl_result = Label(list_frame, text='* 본 프로그램이 있는 폴더에 "11번가 인기검색어.csv" 파일로 저장함 ', fg='black')
lbl_result.configure(font=('Arial', 9,))
lbl_result.pack(side='left', padx=5, pady=5)
# 프로그램 실행 표시 들어갈 공간
lbl_execute_frame = Frame(root)
lbl_execute_frame.pack(fill='x', padx=5, pady=5)
state_var = StringVar()
state_var.set(' ')
lbl_state_txt = Label(lbl_execute_frame, textvariable=state_var)
lbl_state_txt.configure(font=('Arial', 12, 'bold', 'italic'), height=2)
lbl_state_txt.pack(side='right', fill='x', padx=5, pady=5)
# 실행 프레임 - 시작, 닫기
frame_run = Frame(root)
frame_run.pack(fill='x', padx=10, pady=5)
btn_close = Button(frame_run, padx=5, pady=5, text='닫기', width=12, fg='black', cursor='hand2', command=func_quit)
btn_close.pack(side='right', padx=5, pady=5)
btn_start = Button(frame_run, padx=5, pady=5, text='추출 시작', width=12, fg='black', cursor='hand2', command=start)
btn_start.configure(font=('Arial', 10, 'bold'))
btn_start.pack(side='right', padx=5, pady=5)
root.mainloop()
Tkinter로 구현한 화면


pyinstaller로 실행 파일 만드는 명령
- pyinstaller 4.xx 버전인 경우, 바이러스 탐지(오인??) 문제가 있어서 3.6버전으로 해야 한다고 함
# 설치 명령
pip install pyinstaller==3.6
# 실행 파일(.exe) 만들기
pyinstaller -w -F 소스코드명.py
블로그 인기글
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
폐업 신고 절차와 부가가치세 신고하는 방법
폐업 신고 시 세무서 안 가고 온라인으로 신고하는 방법인 '국세청 홈택스를 이용하여 폐업 신고하는 절차와 폐업 후 해야 하는 부가가치세 신고, 인건비 저리, 종합소득세 신고 등에 대해 포스팅합니다. 폐업 신고 시 홈택스 이용하는 방법과 부가가치세 등 신고 절차 여러가지 사유로 폐업을 해야 할 때, 예전에는 세무서를 방문해야 했지만 국세청 홈택스가 생긴 이후에는 사업자 등록이나 폐업 등을 인터넷으로 할 수가 있게 되었습니다. 특히, 코로나 시국인 요즘은 더더욱 온라인 신청 업무가 더 활성화되었죠. 폐업을 한다는 것 자체가 우울한 일인데, 발품을 파는 것보다는 커피 한잔 하면서 인터넷으로 간단하게 처리하는 게 좋을 듯하여 그 절차를 올려봅니다. 폐업은 폐업 신고와 함께 폐업 후 절차까지 모두 마쳐야 불이익이..
goodthings4me.tistory.com
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
이미지 다운로드 관련 requests와 requests-html 비교 (0) | 2022.01.11 |
---|---|
동적(JavaScript) 웹 페이지의 json 데이터 형식 이미지 다운로드 (with 파이썬) (0) | 2022.01.11 |
단축 URL 스크래핑에 파이썬 비동기 처리 개념 적용해보기 (0) | 2022.01.07 |
selenium으로 네이버 쿠키를 얻고 세션을 유지하는 방법 (2) | 2022.01.03 |
웹 브라우저 페이지를 자동으로 스크롤 해보기 (with 파이썬) (0) | 2021.12.28 |
댓글