come riempire il file excel dal selenio raschiando in loop con python

Sep 16 2020

Sto cercando di eliminare un sito Web che contiene molte pagine, con il selenio apro ogni volta una pagina in un secondo 'TAB' e lancio la mia funzione per ottenere i dati. dopodiché chiudo la scheda e apro la scheda successiva e continuo l'estrazione fino all'ultima pagina. il mio problema è quando salvo i miei dati nel file excel, ho scoperto che salva solo l'ultima estrazione di informazioni dall'ultima pagina (scheda). puoi aiutarmi a trovare il mio errore?

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: voglio sempre riempire il file excel dall'ultima riga

Risposte

2 Mike67 Sep 16 2020 at 20:53

Per aggiungere dati Excel utilizzando Pandas , è necessario impostare i fogli di lavoro nell'oggetto writer.

Aggiorna l'ultima sezione del codice:

#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