import time
import threading
import openpyxl
import win32com.client
import requests
from bs4 import BeautifulSoup
html = requests.get('https://www.naver.com/').text
soup = BeautifulSoup(html, 'html.parser')
excel = win32com.client.Dispatch("Excel.Application")
#excel.Visible = True
#title_list = soup.select('.PM_CL_realtimeKeyword_rolling')
title_list = soup.select('.PM_CL_realtimeKeyword_rolling span[class*=ah_k]')
#print(html)
#print(title_list)
wb = openpyxl.Workbook()
sheet1 = wb.active
#excel_file = excel.Workbooks.Open('C:/Users/thkim/Desktop/test3.xlsx')
def thread_run():
print('=========================================================')
for idx, title in enumerate(title_list, 1):
print(idx, title.text)
list =[idx, title.text]
sheet1.append(list)
threading.Timer(4, thread_run).start()
thread_run()
wb.save('C:/Users/thkim/Desktop/test3.xlsx')
현재 네이버 급상승 검색어 1~20위 긁어 와서 엑셀에 저장하는거 하는데
이게 실시간 급상승 검색어 다 보니 시간마다 순위가 변하잖아
그래서 일정 주기마다 쓰레드 타이머 줘서 긁어 오려고 했는데
계속 엑셀이랑 콘솔에는 첨에 크롤링한 데이터만 읽어 오거나 엑셀에 저장 되는데
이거 쓰레드 위치 잘못 준거임???
thread_run 함수 안에서 thread타이머 걸고 또 thread_run 부르는거에 대해서 어떻게 생각함? 적어도 쓰레드 타이머 스타트가 함수 밖으로 나가야 되겠지 않냐?
그리고 밖에서 thread_run을 호출해서 시작시킬게 아니고 쓰레드 타이머 스타트 걸면 시작되는거 아냐?
총체적 난국이네.... 매번 다시 켤꺼 아니고 4초마다 함수 실행되는게 목적이면 4초마다 할일을 다 함수 안에 넣어야될거아냐
4초마다 웹페이지도 다시 로딩하지 않으면 바뀌나 안바뀌나?
여튼 열심히 생각해보고 니가 짠게 어떻게 동작하나 머리에 시뮬레이션 ㄱㄱ
음...일단 조언해 준대로 해서 쓰레드 런 하는 쪽에 실시간 검색어 긁어 오는 부분하고 엑셀에 저장하도록 햇는데 저 쓰레드 부분은 음..조금 설명을 이해 못했네..미안....
아 미안은 내가 미안이지... 힘들어서 물어본걸 너무 4가지 없이 대답했으니. 미안. 쓰레드 타이머 스타트 했으면 쓰레드가 4초마다 타이머 이벤트가 발생하끔 된거야. 그래서 그 문장은 다시 호출되게 할 필요는 없어. 그리고 4초마다 thread_run이 타이머 이벤트가 발생할때마다 호출될꺼고 그럼 너는 4초마다 해야할 일을 그 함수 안에 써주면 되는거.