gtrend_newwire.py 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. from seleniumwire import webdriver
  2. import time
  3. from selenium.webdriver.support.ui import WebDriverWait
  4. from selenium.webdriver.common.by import By
  5. from selenium.webdriver.support import expected_conditions as EC
  6. from selenium.webdriver.chrome.service import Service
  7. from selenium.webdriver.common.keys import Keys
  8. from seleniumwire.utils import decode
  9. import sys
  10. import json
  11. import dataset
  12. import os
  13. import pymysql
  14. pymysql.install_as_MySQLdb()
  15. import undetected_chromedriver as uc
  16. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/gtrend2?charset=utf8mb4')
  17. table_logs=db['gtrend_logs']
  18. table=db['topics']
  19. singles={}
  20. def init_webdriver():
  21. # os.system('taskkill /f /im chrome.exe')
  22. options = uc.ChromeOptions()
  23. # options.add_argument("--disable-blink-features=AutomationControlled")
  24. # options.add_argument('--ignore-certificate-errors')
  25. # options.add_experimental_option("excludeSwitches", ["enable-automation"])
  26. # options.add_experimental_option("useAutomationExtension", False)
  27. # options.debugger_address = "127.0.0.1:" + '8888'
  28. # options.add_argument("--no-sandbox")
  29. # options.add_argument("--headless")
  30. # options.add_argument("--incognito")
  31. profile_path = r"C:\Users\s1301\AppData\Local\Google\Chrome\User Data\Profile 1"
  32. options.add_argument("--disable-gpu")
  33. options.add_argument("--disable-dev-shm-usage")
  34. options.add_argument("--user-data-dir=C:\\Users\\s1301\\AppData\\Local\\Google\\Chrome\\User Data")
  35. options.add_argument("--profile-directory=Automation_Profile")
  36. # options.add_argument('--profile-directory=Default')
  37. # options.add_argument('--profile-directory=Profile 101')
  38. s = Service('C:\/Users\/s1301\/Downloads\/136\/chromedriver-win32\/chromedriver.exe')
  39. driver = uc.Chrome(
  40. options=options, service=s)
  41. print('這裡')
  42. driver.set_window_size(1400,1000)
  43. driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
  44. return driver
  45. def interceptor(request):
  46. print('start')
  47. global sessionid
  48. global singles
  49. print('這裏', driver.requests)
  50. for request in driver.requests:
  51. if 'relatedsearches' in request.url:
  52. if request.response is not None:
  53. rows=[]
  54. if request.response.body is None:
  55. continue
  56. # print(request.response.body)
  57. body = decode(request.response.body,'gzip')
  58. bd=body.decode()
  59. # print(body)
  60. bd=bd.replace(r")]}\',\n",'')
  61. bd=bd.replace(r")]}',",'')
  62. bd=bd.encode().decode('unicode-escape')
  63. js=json.loads(bd)
  64. # print(js)
  65. rlist=js['default']['rankedList']
  66. for r in rlist:
  67. kws=r['rankedKeyword']
  68. print('這已',kws)
  69. for k in kws:
  70. if k.get('topic') is not None:
  71. if singles.get((sessionid,k['topic']['title'])) is None:
  72. singles[(sessionid,k['topic']['title'])]=1
  73. rows.append({'sessionid':sessionid,'mid':k['topic']['mid'],'query':k['topic']['title'],'type':k['topic']['type'],'value':k['value']})
  74. # table.insert()
  75. print(k['topic'])
  76. print(k['value'])
  77. if k.get('query') is not None:
  78. # table.insert({'query':k['query'],'value':k['value']})
  79. if singles.get((sessionid,k['query'])) is None:
  80. singles[(sessionid,k['query'])]=1
  81. rows.append({'sessionid':sessionid,'query':k['query'],'value':k['value']})
  82. print(k['query'])
  83. print(k['value'])
  84. table.insert_many(rows)
  85. # sys.exit()
  86. print('fell')
  87. #sessionid='20231014-關鍵字'
  88. #sessionid='20231018-ChoozMo'
  89. #sessionid='20231024-AI'
  90. #sessionid='20231124-HHH'
  91. #sessionid='20231201-HHH'
  92. #sessionid='20240202-HHH'
  93. #sessionid='20240419-HHH'
  94. #sessionid='20240503-HHH'
  95. #sessionid='20240517-HHH'
  96. #sessionid='20240531-HHH'
  97. sessionid='20250502-HHH'
  98. # os.system('taskkill /f /im chrome.exe')
  99. # time.sleep(5)
  100. cursor=db.query('select distinct sessionid,query from topics ')
  101. for c in cursor:
  102. singles[(c['sessionid'],c['query'])]=1
  103. driver=init_webdriver()
  104. driver.request_interceptor = interceptor
  105. #driver.get('https://google.com.tw/')
  106. #driver.get('https://trends.google.com.tw/')
  107. #time.sleep(9999)
  108. #driver.get('https://trends.google.com.tw/trends/explore?geo=TW&hl=zh-TW')
  109. #driver.get('https://trends.google.com.tw/trends/')
  110. #time.sleep(3)
  111. #elmt = driver.find_element(By.XPATH, "//textarea[@type='search']")
  112. #time.sleep(1)
  113. #elmt.send_keys('家具')
  114. #elmt.send_keys(Keys.ENTER)
  115. #time.sleep(5)
  116. driver.get('https://trends.google.com.tw/trends/explore?date=now%207-d&geo=TW&hl=zh-TW')
  117. time.sleep(5)
  118. # 把下面全部跑一輪 (4個lists)
  119. #kw_list=['裝修','裝潢','櫥櫃','裝潢預算','裝修預算','都更']
  120. #kw_list=['風水','小坪數','老宅','購屋','買房',]
  121. #kw_list=['鍋','洗衣機','冷氣','除濕機','烘碗機','床墊','爐','空氣清淨機','掃地機器人']
  122. kw_list=['/m/01c979','/g/122rvzch','/g/1q6jh4d9s','/m/0c_jw','/m/0d4wf','/m/0bl2jb','/g/11sr9_h44g','/m/06ht1','/m/03gfsp','/m/06wqb','/g/121kx11r','/m/02cwm','/m/02rfdq','/m/01j2bj','/g/11sr9_mdk7']
  123. # kw_list=['設計師','櫃','室內設計師','家具','廚房','坪','浴室改造']
  124. #%2Fm%2F01748f
  125. #%2Fm%2F02vkqh8
  126. #'室內裝修'
  127. #%2Fm%2F02z51p
  128. #%2Fm%2F0m8q5
  129. #%2Fm%2F04vct9
  130. #kw_list=['建材']
  131. #kw_list=['/m/0mkz']
  132. #kw_list=['nvidia']
  133. #kw_list=['沙發']
  134. #房價
  135. #kw_list=['系統櫃']
  136. for kw in kw_list:
  137. try:
  138. table_logs.insert({'kw':kw,'sessionid':sessionid})
  139. except:
  140. print('dup')
  141. print(kw)
  142. #elmt = driver.find_element(By.XPATH, "//div[@jsname='E470yf']//input[@aria-label='搜尋']")
  143. elmt = driver.find_element(By.XPATH, "//input[@aria-label='新增搜尋字詞']")
  144. elmt.clear()
  145. for i in range(20):
  146. elmt.send_keys(Keys.BACK_SPACE)
  147. elmt.send_keys(kw)
  148. elmt.send_keys(Keys.ENTER)
  149. time.sleep(11)
  150. time.sleep(300)
  151. #kw_list=['/g/11j7ys83vr','/g/1yqccwk9n']
  152. #,'/m/019dx1']
  153. #kw_list=['/m/01c979','/g/122rvzch','/g/1q6jh4d9s']
  154. #kw_list=['/m/0c_jw','/m/0d4wf','/m/0bl2jb']
  155. #kw_list=['/g/11sr9_h44g','/m/06ht1','/m/03gfsp']
  156. #kw_list=['/m/06wqb','/g/121kx11r','/m/02cwm']
  157. #kw_list=['/m/02rfdq','/m/01j2bj','/g/11sr9_mdk7']
  158. print(elmt)
  159. time.sleep(1)
  160. #elmt.send_keys(Keys.ENTER)
  161. #elmt.clear()
  162. #ais=['/m/0mkz','/g/11rsc2xsp1']
  163. # 電商'/m/02m96'
  164. #elmt.send_keys('/m/0fy6m3')
  165. #elmt.send_keys('/m/077mq')
  166. #elmt.send_keys(Keys.ENTER)
  167. time.sleep(5)
  168. #time.sleep(9999)
  169. #https://trends.google.com.tw/trends/api/widgetdata/relatedsearches?hl=zh-TW&tz=-480&req=%7B%22restriction%22:%7B%22geo%22:%7B%22country%22:%22TW%22%7D,%22time%22:%222023-10-13T06%5C%5C:10%5C%5C:54+2023-10-14T06%5C%5C:10%5C%5C:54%22,%22originalTimeRangeForExploreUrl%22:%22now+1-d%22,%22complexKeywordsRestriction%22:%7B%22keyword%22:%5B%7B%22type%22:%22BROAD%22,%22value%22:%22%E5%8B%95%E7%89%A9%22%7D%5D%7D%7D,%22keywordType%22:%22QUERY%22,%22metric%22:%5B%22TOP%22,%22RISING%22%5D,%22trendinessSettings%22:%7B%22compareTime%22:%222023-10-12T06%5C%5C:10%5C%5C:54+2023-10-13T06%5C%5C:10%5C%5C:54%22%7D,%22requestOptions%22:%7B%22property%22:%22%22,%22backend%22:%22CM%22,%22category%22:0%7D,%22language%22:%22zh%22,%22userCountryCode%22:%22TW%22,%22userConfig%22:%7B%22userType%22:%22USER_TYPE_LEGIT_USER%22%7D%7D&token=APP6_UEAAAAAZSuCbrHsaUiytOcIA80ZR-ChhKV3nwvA
  170. #driver.get('https://trends.google.com.tw/trends/explore?q=%E5%8F%B0%E7%A9%8D%E9%9B%BB%E9%81%8B%E5%8B%95%E6%9C%83&date=now%201-d&geo=TW&hl=zh-TW')
  171. #time.sleep(9999)