seein2 2024. 8. 16. 18:03
  • 네이버에서 검색하기
from selenium import webdriver # 제어가 가능한 Webdriver 크롬 브라우저
from selenium.webdriver.common.by import By # select를 위한 선택자(CCS,ID,CLASS,NAME, XPATH 등)
from selenium.webdriver.common.keys import Keys # 키보드에 있는 키를 사용하기 위한 모듈

driver = webdriver.Chrome()
driver.get('https://www.naver.com/')
query = driver.find_element(By.ID, 'query') # 검색창 선택
time.sleep(2)
query.send_keys('찰리푸스') # 검색창에 '찰리푸스' 입력
time.sleep(2)
query.clear()
time.sleep(2)
query.send_keys('heat wave')
time.sleep(2)
btn = driver.find_element(By.CLASS_NAME, 'btn_search')
btn.click()
time.sleep(2)
driver.back()
time.sleep(2)
query = driver.find_element(By.ID, 'query') 
query.send_keys('해위')

 

 

  • op.gg에서 챔피언마다 카운터 정보 가져오기
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import requests
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

opgg_url = 'https://www.op.gg/champions'
res = requests.get(opgg_url)
soup = BeautifulSoup(res.text, 'html.parser')
champions = soup.select('.css-1x3kezq>ul>li>a')

links = []
for i in range(len(champions)):
    c_url = champions[i]['href']
    links.append('https://www.op.gg'+c_url)
links # 각 챔피언 링크 경로
driver = webdriver.Chrome()# 드라이버 설정
driver.get(links[0]) # 첫 챔피언( 아트룩스 )
df_counter = pd.DataFrame()

for l in range(len(links)): # 총 챔피언 개수만큼 반복
    driver.get(links[l])

    counter_champion = [] # 카운터챔피언
    easy_champion=[] # 상대하기쉬운챔피언
    win_rate_counter = [] # 카운터 챔피언 승률
    win_rate_easy = [] # 쉬운챔피언 승률
    game_counter = [] # 카운터챔피언 게임수
    game_easy = [] # 쉬운챔피언 게임수

    counter = driver.find_element(By.CSS_SELECTOR, '#content-container > aside > div:nth-child(1) > div.css-jhxxsn.egwzyor3 > div > ul:nth-child(2)') # 카운터 챔피언 정보
    counter_name = counter.find_elements(By.TAG_NAME, 'img') # 카운터 챔피언 이미지태그 ( 몇명인지 알 수 있음)
    counter_winrate = counter.find_elements(By.CLASS_NAME, 'win-rate') # 승률
    counter_games = counter.find_elements(By.CLASS_NAME, 'play') # 게임 수
    
    for i in range(len(counter_name)): # 카운터 챔피언 개수만큼 반복
        counter_champion.append(counter_name[i].get_attribute('alt')) # 'alt'속성에 챔피언 이름이 있음.
        win_rate_counter.append(counter_winrate[i].text) # 텍스트만 추출
        game_counter.append(counter_games[i].text.replace('\n', ' '))

    easy = driver.find_element(By.CSS_SELECTOR, '#content-container > aside > div:nth-child(1) > div.css-jhxxsn.egwzyor3 > div > ul:nth-child(4)') # 상대하기 쉬운 챔피언 정보
    easy_name = easy.find_elements(By.TAG_NAME, 'img')
    easy_winrate = easy.find_elements(By.CLASS_NAME, 'win-rate')
    easy_games = easy.find_elements(By.CLASS_NAME, 'play')

    for i in range(len(counter_name)): # 상대하기 쉬운 챔피언 개수만큼 반복
        easy_champion.append(easy_name[i].get_attribute('alt'))
        win_rate_easy.append(easy_winrate[i].text)
        game_easy.append(easy_games[i].text.replace('\n',''))

	
    # name변수는 현재 챔피언.
    name = [driver.find_element(By.CSS_SELECTOR, '#content-header > div.css-5075o4.e9ymfd20 > div.inner.inner--ads > div.inner-box > div.css-tlxswk.eufekzz0 > div.info-box > h1 > strong').text]
    dic = {
        '카운터챔': [counter_champion],
        '카운터 승률': [win_rate_counter],
        '카운터 게임수': [game_counter],
        '쉬운챔': [easy_champion],
        '쉬운챔 승률': [win_rate_easy],
        '쉬운챔 게임수': [game_easy],
    }
    temp_df = pd.DataFrame(dic, index=name) # 현재 챔피언을 인덱스로
    df_counter = pd.concat([df_counter, temp_df]) # 모든 챔피언의 카운터정보를 데이터 프레임으로