find_elements_by_xpath 的长度不正确
在下面的链接中,我想要统计2023-24常规赛表格中的比赛总数。
https://www.basketball-reference.com/players/j/jokicni01/gamelog/2024
我把这些元素的变量设置为total_games。我的问题是,当我打印len(total_games)时,输出的结果是113。
total_games = driver.find_elements_by_xpath('//tbody/tr[@id and @data-row]')
print(len(total_games))
我手动检查了页面上的元素,并搜索了//tbody/tr[@id and @data-row],结果显示只有66条记录(截至2024年3月19日的准确数据,随着赛季的进行会增加,但总数永远不会超过82)。有人能告诉我,当我在PyCharm中运行这个时,额外的那些记录是从哪里来的吗?
我还尝试使用total_games = driver.find_elements(By.XPATH, '//tbody/tr[@id and @data-row]'),但结果还是一样。我还试着用下面的两行代码让它更具体,但使用这些代码时,PyCharm返回的total_games长度为0。在这两种情况下,手动检查页面时,结果都是正确的。
total_games = driver.find_elements(By.XPATH, '//table[@id="pgl_basic"]/tbody/tr[@id and @data-row]')
还有
total_games = driver.find_elements(By.XPATH, '//tbody/tr[contains(@id, "pgl_basic") and @data-row]')
2 个回答
0
这是因为HTML里有大约8个表格。更好的做法是先找到统计表格,然后如果你想知道球员的比赛场数,就获取
import pandas as pd
url = 'https://www.basketball-reference.com/players/j/jokicni01/gamelog/2024'
df = pd.read_html(url)[-1]
df = df[df['G'].ne('G')]
print(len(df))
0
这个问题有点奇怪。网址是对的,但不知道为什么,虽然可以看到程序访问了正确的页面,但在收集那些元素的时候,它还是从之前的页面拿数据。我加了一个叫做WebDriverWait的功能,让它在收集元素之前先等到我需要的特定元素出现,现在就正常工作了。