только последние очищенные элементы, добавляющиеся в DF при очистке с помощью selenium

#python #pandas #selenium #web-scraping #data-mining

#python #pandas #selenium #веб-очистка #интеллектуальный анализ данных

Вопрос:

я просматриваю веб-сайт, все работает довольно хорошо, за исключением добавления данных в 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.
каков наилучший способ добавить мои данные в dataframe?

Ответ №1:

Похоже, что вы перезаписываете свой df, одновременно удаляя возвраты из своей функции. можно использовать, как показано ниже:

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

Вместо:

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

Комментарии:

1. следуя вашему руководству, я получаю ошибку: имя ‘df’ не определено

2. Определите фрейм данных как df перед его использованием.

Ответ №2:

******* привет, небольшое изменение здесь, и в остальном все в порядке

Поскольку вы добавляете внутри функции, обратите внимание, что действие append выполнено успешно, но это временно, поскольку вы возвращаете, что снаружи вам нужно добавить это после вызова функции, как всегда, вы возвращаетесь к одной и той же переменной снова и снова, она перезаписывается в переменной «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», она автоматически вызывает другую функцию, написанную для добавления, и работа выполнена.