Selenium 如何在 Python 中通过class_name找到具有相同类名的多个(第二、第三、第四等)元素



我只是想知道如何使用相同的类名'linescores-table'调用下一个表,因为只有第一个表,我可以进入第二个表

我试图制作这段代码,但它获取错误。 将 s 放入元素

[table = driver.find_elements_by_class_name("linescores-table")]

这是我想用硒刮的桌子[1]: https://i.stack.imgur.com/NRcY5.png

完整的代码在这里,你可以尝试自己仔细理解我的问题

from selenium import webdriver
from pandas import *
import pandas as pd
import numpy as np
path_to_chromedriver = 'chromedriver.exe' 
driver = webdriver.Chrome(executable_path=path_to_chromedriver)
url = 'https://stats.nba.com/scores/01/23/2019'
driver.get(url)
table = driver.find_element_by_class_name("linescores-table")
team1_quarter_score= []
team2_quarter_score= []
for line_id,lines in enumerate(table.text.split('n')):
    if line_id == 0:
        column_names = lines.split(' ')[1:]
    else:
        if line_id % 2 == 1:
            team1_quarter_score.append(lines.split(' '))
        if line_id % 2 == 0:
            team2_quarter_score.append(lines.split(' '))
df1 = pandas.DataFrame({'teams': [i[0] for i in team1_quarter_score],
                       'standing': [i[1] for i in team1_quarter_score],
                       'q1': [i[2] for i in team1_quarter_score],
                       'q2': [i[3] for i in team1_quarter_score],
                       'q3': [i[4] for i in team1_quarter_score],
                       'q4': [i[5] for i in team1_quarter_score],
                       'finalScore':[i[6] for i in team1_quarter_score]
                                                  }
                     )
df2 = pandas.DataFrame({'teams': [i[0] for i in team2_quarter_score],
                       'standing': [i[1] for i in team2_quarter_score],
                       'q1': [i[2] for i in team2_quarter_score],
                       'q2': [i[3] for i in team2_quarter_score],
                       'q3': [i[4] for i in team2_quarter_score],
                       'q4': [i[5] for i in team2_quarter_score],
                       'finalScore':[i[6] for i in team2_quarter_score]
                                                  }
                     )
df=df1.append(df2)
print(df)

期望收集具有相同类名的第二个表中的所有数据,但我只得到第一个表。

这是代码的实际输出。

  teams standing  q1  q2  q3  q4 finalScore
0   TOR    36-14  16  31  28  31        106
1   IND    32-15  24  35  25  26        110

我的预期输出将是 2 个表

  teams standing  q1  q2  q3  q4 finalScore
0   TOR    36-14  16  31  28  31        106
1   IND    32-15  24  35  25  26        110

  teams standing  q1  q2  q3  q4 finalScore
0   CLE     9-40  30  20  30  23        103
1   BOS    30-18  27  38  27  31        123

我的整个更新和工作代码感谢您对^^的帮助

from selenium import webdriver
from pandas import *
import pandas as pd
import numpy as np
path_to_chromedriver = 'chromedriver.exe' 
driver = webdriver.Chrome(executable_path=path_to_chromedriver)
url = 'https://stats.nba.com/scores/01/23/2019'
driver.get(url)
tables = driver.find_elements_by_class_name("linescores-table")
for table in tables:
    team1_quarter_score= []
    team2_quarter_score= []
for line_id,lines in enumerate(table.text.split('n')):
    if line_id == 0:
        column_names = lines.split(' ')[1:]
    else:
        if line_id % 2 == 1:
            team1_quarter_score.append(lines.split(' '))
        if line_id % 2 == 0:
            team2_quarter_score.append(lines.split(' '))
df1 = pd.DataFrame({'teams': [i[0] for i in team1_quarter_score],
                       'standing': [i[1] for i in team1_quarter_score],
                       'q1': [i[2] for i in team1_quarter_score],
                       'q2': [i[3] for i in team1_quarter_score],
                       'q3': [i[4] for i in team1_quarter_score],
                       'q4': [i[5] for i in team1_quarter_score],
                       'finalScore':[i[6] for i in team1_quarter_score]
                                                  }
                     )
df2 = pd.DataFrame({'teams': [i[0] for i in team2_quarter_score],
                       'standing': [i[1] for i in team2_quarter_score],
                       'q1': [i[2] for i in team2_quarter_score],
                       'q2': [i[3] for i in team2_quarter_score],
                       'q3': [i[4] for i in team2_quarter_score],
                       'q4': [i[5] for i in team2_quarter_score],
                       'finalScore':[i[6] for i in team2_quarter_score]
                                                  }
                     )
df=df1.append(df2)
print(df)

您的代码只获取第一个表。 你与你的另一个尝试很接近。 尝试:

tables = driver.find_elements_by_class_name("linescores-table")

这应该为您提供所有要使用的表。只需将其余代码包装在一个 for 循环中,该循环将对所有表执行相同的工作:

for table in tables:
    team1_quarter_score= []
    ...

相关内容

最新更新