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