代码之家  ›  专栏  ›  技术社区  ›  maxpower8888

find_elements_by_xpath的长度不正确

  •  0
  • maxpower8888  · 技术社区  · 2 年前

    在下面的链接中,我试图收集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和@data row],即使在搜索结果中,它也只显示了66个条目(截至2024年3月19日准确无误,随着季节的持续,条目数量将增加,但永远不应超过82个)。当我在PyCharm中运行这个程序时,有人能告诉我所有额外的条目是从哪里来的吗?

    我也尝试过使用total_games=driver.find_elements(By.XPATH,'//tbody/tr[@id和@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]')
    
    0 回复  |  直到 2 年前
        1
  •  0
  •   maxpower8888    2 年前

    所以这是一个奇怪的一个。URL是正确的,但出于某种原因,即使您可以看到脚本转到正确的页面,当收集这些元素时,它仍然会从上一页中获取这些元素。我添加了一个WebDriverWait函数,让它在收集元素之前等待页面上我需要的特定元素,现在它可以工作了。

        2
  •  0
  •   chitown88    2 年前

    这是因为html中大约有8个表。一个更好的方法是获取统计数据表,然后在中获取最大值 'G' 列,如果你想要玩家的游戏数量,或者只是 'RK' 总游戏表的列或长度。

    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))