구글 트렌드 봇 -3

2023. 5. 10. 01:02프로젝트/구글 트렌드 봇

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import pandas as pd
import requests

url = "https://trends.google.co.kr/trends/trendingsearches/daily?geo=KR&hl=ko"

chrome_driver_path = 'path/to/chromedriver'

driver = webdriver.Chrome()
driver.get(url)

time.sleep(5)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
load_more_button = driver.find_element(By.CLASS_NAME, "feed-load-more-button")
load_more_button.click()
time.sleep(1)

dates = driver.find_elements(By.CLASS_NAME,"content-header-title")
trend_list = []
# for i in range(len(dates)):
i = 1
temp = [dates[i].text]
dates = driver.find_elements(By.CLASS_NAME,"content-header-title")
day_data = driver.find_elements(By.CLASS_NAME,"feed-list-wrapper")
day_titles= day_data[i].find_elements(By.CLASS_NAME,"title")
day_summarise = day_data[i].find_elements(By.CLASS_NAME,"summary-text")
day_search_counts = day_data[i].find_elements(By.CLASS_NAME,"search-count-title")
for j in range(len(day_titles)):
    temp2 = [
            day_titles[j].text, 
            day_summarise[j].text, 
            day_search_counts[j].text,
            (driver.find_elements(By.CSS_SELECTOR, "div.summary-text > a")[j]).get_attribute("ng-href")
            ]
    temp.append(temp2)
trend_list.append(temp)
    

trend_df = pd.DataFrame(trend_list)
columns = ['날짜', '이슈', '제목', '조회수', '링크']
rows = []
for k in trend_list:
    date = k[0]
    for trend in k[1:]:
        row = [date] + trend
        rows.append(row)
day_df = pd.DataFrame(rows, columns=columns)

def remove_weekday(date_str):
    split_date = date_str.split()
    cleaned_date = ' '.join(split_date[:-1])
    return cleaned_date

day_df["날짜"] = day_df["날짜"].apply(remove_weekday)

yesterday = day_df['날짜'].unique().tolist()

time.sleep(1)
# temp_df = day_df[day_df["날짜"] == f'{yesterday}'].reset_index().loc[:, ['이슈','제목','링크']]
temp_df = day_df[day_df["날짜"] == yesterday[0]].loc[:, ['이슈','제목','링크']]

df = pd.DataFrame(temp_df)
df.index = range(1, len(df) + 1)

def send_slack_dataframe_with_grid(api_token, channel, dataframe, message=None):
    url = "https://slack.com/api/chat.postMessage"
    headers = {
        "Authorization": f"Bearer {api_token}",
        "Content-Type": "application/json"
    }
    
    code_block = f"```\n{dataframe}\n```"
    
    if message:
        payload = {
            "channel": channel,
            "text": f"{message}\n{code_block}"
        }
    else:
        payload = {
            "channel": channel,
            "text": code_block
        }

    response = requests.post(url, headers=headers, json=payload)
    print(response.json())

api_token = "xoxb-토큰값"
channel = "#채널명"
message = yesterday
send_slack_dataframe_with_grid(api_token, channel, df, message=message)

위 코드를 실행하면

바로 어제의 구글 트렌드가 슬랙봇으로 전송된다.

 

 

Troiubleshooting 

 

계속 하여 빈 dataframe 만 전송되었는데

dataframe 과 list 의 타입을 착각해서 발생한 오류였음

yesterday 를 .tolist() 로 리스트로 만들어 놨으면서

f'{yesterday}' 로 value 를 받으려고 착각했었다.

[0] 슬라이싱으로 첫값을 바로 받아오도록 수정.

 

또 .reset_index() 를 사용해서 새로 인덱스가 추가되는것.

오류는 아니지만 ['이슈','제목','링크'] 만을 가져오기에 필요 없는 작업..

 

좀 더 효율적이게 되자!

 

 

다음 목표는 

위 코드를 자동화(00:05 로 생각) 서버에 올려서 컴퓨터가 꺼진상태에서도 작동되게 배포.

728x90

'프로젝트 > 구글 트렌드 봇' 카테고리의 다른 글

window, wsl 차이? Chrome, Chromium 차이?  (0) 2023.05.13
구글 트렌드 봇 -2  (0) 2023.05.08
구글 트렌드 봇 -1  (0) 2023.04.29