python - 仅在使用 selenium 刮擦时添加到 DF 的最后刮擦项目
问题描述
我正在抓取一个网站,除了将数据附加到 DataFrame 之外,一切都运行良好;
def function(selector,name ,driver) :
df = pd.DataFrame()
try:
data = {}
result = WebDriverWait(driver, 1).until(EC.visibility_of_element_located((By.CSS_SELECTOR, selector))).text
print(name , result)
data.update( {name : result} )
except Exception as e:
data.update( {name : " "} )
finally :
df = df.append(data,ignore_index= True)
return df
df=function(".home span" , "team1_name",driver )
df=function(".away span" , "team2_name",driver )
df=function(".home strong+ strong" , "team1_position",driver )
df=function(".away strong+ strong" , "team2_position",driver )
结果始终是最后一个被抓取的项目,即 team2_position。将我的数据附加到数据框中的最佳方法是什么?
解决方案
******* 嘿,这里有一个小变化,休息一切都很好
当您在函数内部追加时,请注意操作是追加成功的,但它是临时的,因为您返回外部您需要在函数调用后追加它,因为您总是一次又一次地返回到同一个变量,它越来越覆盖在变量“df”中,因此最后分配的任何内容都存储在该变量中,
所以你可以通过多种方式做到这一点
- 只需用下面的代码替换最后四行
df = pd.DataFrame()
df.append(function(".home span" , "team1_name",driver ))
df.append(function(".away span" , "team2_name",driver ))
df.append(function(".home strong+ strong" , "team1_position",driver ))
df.append(function(".away strong+ strong" , "team2_position",driver ))
更改代码如下,只需复制过去即可
def function(selector,name ,driver,df) :
try:
data = {}
result = WebDriverWait(driver, 1).until(EC.visibility_of_element_located((By.CSS_SELECTOR, selector))).text
print(name , result)
data.update( {name : result} )
except Exception as e:
data.update( {name : " "} )
finally :
df = df.append(data,ignore_index= True)
return df
df = pd.DataFrame()
df=function(".home span" , "team1_name",driver,df)
df=function(".away span" , "team2_name",driver ,df)
df=function(".home strong+ strong" , "team1_position",driver ,df)
df=function(".away strong+ strong" , "team2_position",driver ,df)
正如我们在 type1 中所做的那样)----> 您可以定义一个函数来将返回的临时数据帧附加到最终数据帧,并且可以在函数名称“function”中调用该函数,因此当我们调用此函数“function”时,它会自动调用另一个编写为追加的函数并完成了工作。
推荐阅读
- python - 使用 python 请求构建 ProcessAuth POST
- r - Facet_Wrap 在我的数据集中因更多级别的因素而拥挤
- javascript - 如何添加和使用 Vue 模板中的数据?
- sql-server - 尝试使用 MERGE INTO,导致数据类型不兼容
- spring - 如何确保让我的自定义 OidcUserService 被默认调用?
- ms-access - 保存记录时自动更新 LastDateModified 字段
- flask - Flask 管理表单编辑规则导致“没有字段”错误
- ios - Apple Authentication Button 使用 expo-apple-authentication 包不显示
- reporting-services - SWITCH 函数表达式
- java - 为什么 Jacoco 将我的 for 循环标记为部分覆盖?