【问题标题】:only last scraped items adding to DF while scraping with selenium仅在使用 selenium 刮擦时添加到 DF 的最后刮擦项目
【发布时间】:2020-12-11 11:35:12
【问题描述】:

我正在抓取一个网站,除了将数据附加到 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。 将我的数据附加到数据框中的最佳方法是什么?

【问题讨论】:

    标签: python pandas selenium web-scraping data-mining


    【解决方案1】:

    看起来您正在覆盖您的 df ,同时保留函数的返回值。可以像下面这样使用:

    df.append(function(".home span" , "team1_name",driver ))
    

    代替:

    df =  function(".home span" , "team1_name",driver )
    

    【讨论】:

    • 按照你的指南我得到错误:名称'df'未定义
    • 使用前先定义一个数据框为df。
    【解决方案2】:

    ******* 嘿嘿这里有一点变化,休息一切都很好

    当您在函数内部追加时,请注意操作是追加成功的,但它是临时的,因为您返回外部,您需要在函数调用后追加它,就像往常一样,您一次又一次地返回到同一个变量,它在变量“df”中被覆盖,因此最后分配的任何内容都存储在该变量中,

    所以你可以通过多种方式做到这一点

    1. 只需将最后四行替换为以下代码
    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”时,它会自动调用另一个写入append的函数并完成工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2019-03-09
      • 1970-01-01
      • 2019-09-28
      • 1970-01-01
      • 2020-01-09
      • 2021-09-06
      相关资源
      最近更新 更多