├── README.md └── cekilis.py /README.md: -------------------------------------------------------------------------------- 1 | # python-scraper 2 | 3 | Implemented during a coding livestream: https://www.youtube.com/watch?v=mxTiT2igK7A 4 | -------------------------------------------------------------------------------- /cekilis.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from bs4 import BeautifulSoup 3 | import time 4 | import random 5 | 6 | ytLiveChatURL = "https://www.youtube.com/live_chat?v=mxTiT2igK7A" 7 | keyword = "turkcedev" 8 | eligibleUsers = set() 9 | 10 | # start web browser 11 | browser = webdriver.Firefox() 12 | 13 | 14 | def getHTML(url): 15 | # get source code 16 | browser.get(ytLiveChatURL) 17 | time.sleep(1) 18 | page_source = browser.page_source 19 | return page_source 20 | 21 | 22 | def parseHTML(html_source): 23 | return BeautifulSoup(html_source, 'html.parser') 24 | 25 | 26 | def getMessages(soup): 27 | return soup.find_all("yt-live-chat-text-message-renderer") 28 | 29 | 30 | def updateEligibleUsers(messages): 31 | for message in messages: 32 | content = message.find("div", {"id": "content"}) 33 | author = content.find("span", {"id": "author-name"}).text 34 | message_content = content.find("span", {"id": "message"}).text 35 | if keyword in message_content.lower(): 36 | eligibleUsers.add(author) 37 | 38 | 39 | def startDrawing(eligibleUsersList): 40 | print("Cekilis basliyor! {totalUserCount} kisi hak kazandi.".format( 41 | totalUserCount=len(eligibleUsersList))) 42 | 43 | time.sleep(3) 44 | for i in range(1, 5): 45 | noktalar = i * "." 46 | print("Rasgele bir sayi cekiliyor" + noktalar) 47 | time.sleep(1.5) 48 | 49 | print("Hazir misiniz?") 50 | time.sleep(1.5) 51 | print("Son kontrolleri yapiyorum..") 52 | time.sleep(1.5) 53 | print("Bugun nasilsin?") 54 | time.sleep(1.5) 55 | print("Son son kontrolleri yapiyorum..") 56 | print("{totalUserCount} kisi arasindan kazanan:".format( 57 | totalUserCount=len(eligibleUsersList)), random.choice(eligibleUsersList)) 58 | 59 | 60 | def main(): 61 | for i in range(0, 7): 62 | html_source = getHTML(ytLiveChatURL) 63 | soup = parseHTML(html_source) 64 | messages = getMessages(soup) 65 | updateEligibleUsers(messages) 66 | print("{count} kisi cekilise katilmis durumda.".format( 67 | count=len(eligibleUsers))) 68 | time.sleep(10) 69 | 70 | eligibleUsersList = list(eligibleUsers) 71 | startDrawing(eligibleUsersList) 72 | browser.close() 73 | 74 | 75 | main() 76 | --------------------------------------------------------------------------------