如何根据HTML从统计页面中提取玩家的信息?

2024-03-29 09:56:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用selenium为一个网站搜集一些信息,下面是网站的链接http://www.ultimatetennisstatistics.com/playerProfile?playerId=4742 我试图得到的信息是在球员'统计'我的代码现在打开球员的个人资料,然后打开球员的统计页,我正在试图找到一种方法来提取球员的统计页下面的信息是我的代码到目前为止

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.ultimatetennisstatistics.com/playerProfile?playerId=4742")
soup = BeautifulSoup(driver.page_source,"lxml")
try:
dropdown = driver.find_element_by_xpath('//*[@id="playerPills"]/li[9]/a')
dropdown.click()


bm = driver.find_element_by_id('statisticsPill')
bm.click()

for i in soup.select('#statistics table.table tr'):
    print(i)
    data1 = [x.get_text(strip=True) for x in i.select("th,td")]
    print(data1)

except ValueError:
      print("error")

我 发球

                            <th class="pct-data text-right"><i class="fa fa-percent"></i></th>
                            <th class="raw-data text-right" style="display: none;"><i class="fa fa-hashtag"></i></th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td>Ace %</td>



                            <th class="text-right pct-data">23.4%</th>
                            <th class="raw-data text-right" style="display: none;">12942 / 55377</th>


                        </tr>
                        <tr>
                            <td>Double Fault %</td>



                            <th class="text-right pct-data">4.2%</th>
                            <th class="raw-data text-right" style="display: 

Tags: textright信息datarawstyledrivertr
2条回答

问题是这条线的位置-

soup = BeautifulSoup(driver.page_source,"lxml")

它应该在你点击“统计”标签之后出现。因为只有表加载和soup才能解析它。你知道吗

最终代码-

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome(executable_path=r'//path/chromedriver.exe')
driver.get("http://www.ultimatetennisstatistics.com/playerProfile?playerId=4742")

try:
   dropdown = driver.find_element_by_xpath('//*[@id="playerPills"]/li[9]/a')
   dropdown.click()
   bm = driver.find_element_by_id('statisticsPill')
   bm.click()
   driver.maximize_window()
   soup = BeautifulSoup(driver.page_source,"lxml")
   for i in soup.select('#statisticsOverview table tr'):
     print(i.text)
     data1 = [x.get_text(strip=True) for x in i.select("th,td")]
     print(data1)

except ValueError:
      print("error")

要从统计信息页面中提取玩家的信息,可以使用以下解决方案:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("http://www.ultimatetennisstatistics.com/playerProfile?playerId=4742")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='playerPills']//a[@class='dropdown-toggle'][normalize-space()='Statistics']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='dropdown-menu']//a[@id='statisticsPill'][normalize-space()='Statistics']"))).click()
    statistics_items = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located((By.XPATH, "//table[@class='table table-condensed table-hover table-striped']//tbody//tr/td")))
    statistics_value = WebDriverWait(driver, 10).until(EC.visibility_of_any_elements_located((By.XPATH, "//table[@class='table table-condensed table-hover table-striped']//tbody//tr//following::th[1]")))
    for item, value in zip(statistics_items, statistics_value):
        print('{} {}'.format(item.text, value.text))
    
  • 控制台输出:

    Ace % 4.0%
    Double Fault % 2.1%
    1st Serve % 68.7%
    1st Serve Won % 71.8%
    2nd Serve Won % 57.3%
    Break Points Saved % 66.3%
    Service Points Won % 67.2%
    Service Games Won % 85.6%
    Ace Against % Return
    Double Fault Against % 7.2%
    1st Srv. Return Won % 3.4%
    2nd Srv. Return Won % 34.2%
    Break Points Won % 55.3%
    Return Points Won % 44.9%
    Return Games Won % 42.4%
    Points Dominance 33.3%
    Games Dominance Total
    Break Points Ratio 1.29
    Total Points Won % 2.31
    Games Won % 1.33
    Sets Won % 54.4%
    Matches Won % 59.7%
    Match Time 77.2%
    

相关问题 更多 >