구글 트렌드 봇 -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 |