【发布时间】:2023-03-23 11:24:01
【问题描述】:
我正在尝试使用 selenium 抓取 NBA 球员姓名和预计的幻想得分(不是单一统计 DFS)。我已经使用 selenium 自动点击 NBA,并选择了幻想得分选项卡。
从那里,我在一个网格中看到玩家,我想为每个玩家刮掉分数和名字。我试图遍历网格,但我认为我做的不对
有人可以看看我的代码并指出正确的方向吗?
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://app.prizepicks.com/")
popup = driver.find_element_by_class_name("close").click()
NBA = driver.find_element_by_xpath("//div[@class='name'][normalize-space()='NBA']").click()
fantasyScore = driver.find_element_by_xpath("//div[@class='segment-selector-button']").click()
projections = driver.find_element_by_class_name('projections')
nbaPlayers = []
for projection in projections:
names = projection.find_element_by_xpath('.//*[@id="projections"]/div/div/div[1]/div[2]/div[1]/div[3]/div[1]').text
points= projection.fine_element_by_xpath('.//*[@id="projections"]/div/div/div[1]/div[2]/div[2]/div[1]/text()').text
print(names, points)
players = {
'Name': names,
'FantasyPoints':points,
}
nbaPlayers.append(players)
df = pd.DataFrame(nbaPlayers)
print(df)
driver.quit()
编辑:6.12.21 5:22 PM CST 这是我的代码的第一部分,由 C. Peck 修复(谢谢!) 下一段代码也不成功。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#sample data
pp = {'Player Name':['Donovan Mitchell', 'Kawhi Leonard', 'Rudy Gobert', 'Paul George','Reggie Jackson', 'Jordan Clarkson'],
'Fantasy Score': [46.0, 50.0, 40.0, 44.0, 25.0, 26.5]}
#Creating a dataframe from dictionary
dfNBA = pd.DataFrame(pp)
#Scraping ESPN
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://www.espn.com/")
#Clicking the search button
driver.find_element_by_xpath("//a[@id='global-search-trigger']").click()
#sending data to the search button
driver.find_element_by_xpath("//input[@placeholder='Search Sports, Teams or Players...']").send_keys(dfNBA.iloc[0,:].values[0])
WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".search_results__details")))
playerPage = driver.find_element_by_css_selector(".search_results__details").click()
#Scraping data from last 10 games
points = driver.find_element_by_xpath("//*[@id='fittPageContainer']/div[2]/div[5]/div/div[1]/div[1]/section/div/div[3]/div/div/div[2]/table/tbody/tr[1]/td[13]")
rebs = driver.find_element_by_xpath("//*[@id='fittPageContainer'']/div[2]/div[5]/div/div[1]/div[1]/section/div/div[3]/div/div/div[2]/table/tbody/tr[1]/td[7]")
asts = driver.find_element_by_xpath("//*[@id='fittPageContainer']/div[2]/div[5]/div/div[1]/div[1]/section/div/div[3]/div/div/div[2]/table/tbody/tr[1]/td[8]")
blks = driver.find_element_by_xpath("//*[@id='fittPageContainer']/div[2]/div[5]/div/div[1]/div[1]/section/div/div[3]/div/div/div[2]/table/tbody/tr[1]/td[9]")
stls = driver.find_element_by_xpath("//*[@id='fittPageContainer']/div[2]/div[5]/div/div[1]/div[1]/section/div/div[3]/div/div/div[2]/table/tbody/tr[1]/td[10]")
tnvrs = driver.find_element_by_xpath("//*[@id='fittPageContainer']/div[2]/div[5]/div/div[1]/div[1]/section/div/div[3]/div/div/div[2]/table/tbody/tr[1]/td[12]")
projectedPoints = points+(rebs*1.2)+(asts*1.5)+(blks*3)+(stls*3)-(tnvrs*1)
print(projectedPoints)
#my final table should look like:
#Index Name FantasyPoints ESPN L10 Avg
#0 Donovan Mitchell 46 27.8
这个项目的目标是首先抓取 PrizePicks 并获取 NBA 球员姓名和幻想得分点,然后使用存储的 dataframe 数据将抓取的数据存储到 dataframe 中,我尝试遍历每一行,然后获取球员名称并将其插入 ESPN 搜索框。这应该会打开播放器页面。在球员页面上,我尝试抓取得分、篮板、助攻、抢断、盲注、失误等,然后使用projectedPoints 变量中的公式将它们相加
所以最终,我将能够计算每个玩家的预计分数,并将这些分数与从奖品选择中获取的幻想分数进行比较。使用此比较,我将决定玩家是否会超过或低于幻想得分
【问题讨论】:
-
我可以看到类名
projections..
标签: python pandas selenium selenium-webdriver