这是我的以下代码。我尝试刮擦一个由多行和每行2个td(列)组成的表。当我运行以下代码时,我只会得到最后一行...我做错了吗?我想获取所有行(共6行)。
请注意,td1_7
是一个列表,例如,当我运行print(td1_7[0])
时,它会给我第一行,直到td1_7[6]
为止,这样才能正常工作。我不明白为什么我在运行下面的代码时只得到最后一行。有人可以帮我吗?谢谢。
columns = ['Score','Player']
final_df = pd.DataFrame(columns=columns)
for rows in td1_7:
score = [data.get_text(strip=True) for data in rows.find_all('td')]
temp_df = pd.DataFrame(score).transpose()
temp_df.columns = columns
final_df = pd.concat([final_df,temp_df], ignore_index=True)
print(final_df)
答案 0 :(得分:0)
我不是100%知道您在做什么。但是你总是打电话
score = [data.get_text(strip=True) for data in rows.find_all('td')]
在for循环中。因此score
将是您从for循环中的最后一次迭代获得的值,因为您始终会用最新的值覆盖它。如果您想拥有所有scores
,则可以执行以下操作:
scores = []
for row in td1_7:
score = [data.get_text(strip=True) for data in rows.find_all('td')]
scores.append(score)
print(scores) # scores is a list of lists now
但是我不完全知道您拥有什么输入,您想要什么输出,这只是一个猜测。
答案 1 :(得分:0)
因为您正在运行一个for循环,并且每次使用最新信息(最后一行)更新分数时,都会如此。在代码中进行更改,以便初始化分数,然后将其附加到其中。
columns = ['Score','Player']
final_df = pd.DataFrame(columns=columns)
score = []
for rows in td1_7:
score.append([data.get_text(strip=True) for data in rows.find_all('td')])
temp_df = pd.DataFrame(score).transpose()
temp_df.columns = columns
final_df = pd.concat([final_df,temp_df], ignore_index=True)
print(final_df)