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