python - 如何根据 HTML 从统计页面中提取玩家信息?
问题描述
我正在尝试使用 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:
解决方案
要从统计页面中提取玩家的信息,您可以使用以下解决方案:
代码块:
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%
推荐阅读
- bash - 如何从使用 while 循环的函数返回
- django - return different queryset with different radio button in template in the same page django
- python - ImportError:在未安装 sqlalchemy 的情况下使用 URI 字符串,同时使用 SqlLite 在 Pandas SQL API 上执行 REGEXP 函数
- python - 将 Python 日期时间转换为 Firestore 时间戳格式
- android-studio - 如何使 compileSdkVersion 等于或高于显示的选项
- ios - Swift 覆盖 var 继承
- python - 关闭烧瓶项目的 RSVP
- arrays - 如何按 1)长度和 2)字母顺序对 char 数组进行排序?
- aws-amplify - Amplify CLI 在创建 API 模型时挂起数小时
- html - 内容粘在导航栏上