como preencher o arquivo do Excel com selênio raspando em loop com python

Sep 16 2020

Estou tentando fazer um scrap em um site que não contém muitas páginas, com selenium eu abro cada vez uma página no segundo 'TAB' e lanço minha função para obter os dados. depois disso, fecho a guia e abro a próxima guia e continuo a extração até a última página. meu problema é quando eu salvo meus dados no arquivo excel, descobri que ele salva apenas a última informação extraída da última página (guia). você pode me ajudar a encontrar meu erro?

def scrap_client_infos(linksss):

tds=[] # tds is the list that contain the data

reader=pd.read_excel(r'C:\python projects\mada\db.xlsx')
writer= pd.ExcelWriter(r'C:\python projects\mada\db.xlsx',engine='openpyxl')
html = urlopen(linksss)
soup=BeautifulSoup.BeautifulSoup(html,'html.parser')

table=soup.find('table',attrs={'class':'r2'})

#scrab all the tr that contain text    
for tr in table.find_all('tr'):
    elem = tr.find('td').get_text()
    elem=elem.replace('\t','')
    elem=elem.replace('\n','')
    elem=elem.replace('\r','')
    tds.append(elem)
    
print(tds)   

#selecting the data that i need to save in excel
raw_data={'sub_num':[tds[1]],'id':[tds[0]],'nationality':[tds[2]],'country':[tds[3]],'city':[tds[3]],'age':[tds[7]],'marital_status':[tds[6]],'wayy':[tds[5]]}    
df=pd.DataFrame(raw_data,columns=['sub_num','id','nationality','country','city','age','marital_status','wayy'])

#save the data in excel file
df.to_excel(writer, sheet_name='Sheet1',startrow=len(reader), header=False)
writer.save()
return soup        

PS: quero sempre preencher o arquivo excel da última linha

Respostas

2 Mike67 Sep 16 2020 at 20:53

Para anexar dados do Excel usando o Pandas , você precisa definir as planilhas no objeto escritor.

Atualize a última seção do seu código:

#save the data in excel file
from openpyxl import load_workbook
book = load_workbook(path)
startrw = book['Sheet1'].max_row+1
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)  # prevent overwrite
df.to_excel(writer, sheet_name='Sheet1',startrow=startrw, header=False)
writer.save()
return soup