File size: 2,512 Bytes
d675f88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b2c4288
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import time
import random
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import gradio as gr

# 스크롤을 위한 함수
def scroll_down(driver):
    # 페이지 끝까지 스크롤
    driver.find_element(By.TAG_NAME, "body").send_keys(Keys.END)
    time.sleep(random.uniform(1, 2))

# 100개의 상품 정보를 수집하는 함수
def get_funding_items():
    # Chrome 옵션 설정
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--headless")  # 브라우저 창을 띄우지 않음
    chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36")
    
    # ChromeDriver 실행
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

    # 와디즈 페이지 접속
    driver.get('https://www.wadiz.kr/web/wreward/category?order=recommend')

    # 페이지 로딩 대기
    time.sleep(random.uniform(2, 4))

    # 스크롤 및 데이터 수집
    items = []
    while len(items) < 100:
        # 페이지 로딩을 위해 잠시 대기
        time.sleep(random.uniform(1, 2))

        # 스크롤 다운
        scroll_down(driver)
        
        # 상품 정보 수집
        product_cards = driver.find_elements(By.CLASS_NAME, 'HomeHorizontalCard_content__1eT1m')

        for card in product_cards:
            if len(items) >= 100:
                break
            try:
                title = card.find_element(By.CLASS_NAME, 'Title_title__3kHxQ').text
                maker = card.find_element(By.CLASS_NAME, 'MakerWrapper_makerName__131I-').text
                funding_info = card.find_element(By.CLASS_NAME, 'InfoStringWrapper_infoString__2HtEW').text
                items.append({
                    'title': title,
                    'maker': maker,
                    'funding_info': funding_info
                })
            except Exception as e:
                continue

    driver.quit()
    return items

# Gradio 인터페이스 생성
def display_items():
    items = get_funding_items()
    return items

# Gradio UI 설정
interface = gr.Interface(fn=display_items, inputs=[], outputs="json", title="와디즈 펀딩 정보 가져오기")

if __name__ == "__main__":
    interface.launch(share=True)