2017-12-27 6 views
2

ich den Code haben Gebrüll:Panda Export nach CSV

from xlsxwriter import Workbook 
import os,shutil 
import requests 
import pandas 
from bs4 import BeautifulSoup 
MAX_RETRIES = 20 
base_url='https://pagellapolitica.it/politici/sfoggio/9/matteo-renzi?page=' 

for page in range(1,32,1): 
    l=[] 
    session = requests.Session() 
    adapter = requests.adapters.HTTPAdapter(max_retries=MAX_RETRIES) 
    session.mount('https://', adapter) 
    session.mount('http://', adapter) 

    site=(base_url+str(page)+".html") 
    # print(site) 
    c=session.get(site) 
    r=c.content 
    soup=BeautifulSoup(r,'html.parser') 
    all=soup.find_all("div",{"class":"clearfix"}) 


for d in all: 
    links=d.find_all("a") 
    len(links) 
    l=[] 
    # workbook = Workbook('bbb.xlsx') 
    # worksheet = workbook.add_worksheet() 
    # row +=0 
    # worksheet.write(row,0,'Link') 
    # worksheet.write(row,1,'Name ') 
    # row+=1 
    for a in links[5:17]: 

     d={} 
     href=(a["href"]) 
     basic_url=('https://pagellapolitica.it/') 
     site =basic_url + href 
     #print(site) 

     c=requests.get(site) 
     r=c.content 
     soup=BeautifulSoup(r,'html.parser') 
     Name=soup.find("h3",{"class":"pull-left"}).text 
     Fact_checking=soup.find("label",{"class":"verdict-analisi"}).text 
     quote=soup.find("div",{"class":"col-xs-12 col-sm-6 col-smm-6 col-md-5 col-lg-5"}).text 
     all=soup.find_all("span",{"class":"item"}) 
     Topic=all[0].text 
     Date=all[2].text 
     a=all[3].find("a",{"class":"" ""}) 
     Link=a["href"] 
     Text=soup.find("div",{"class":"col-xs-12 col-md-12 col-lg-12"}).text 
     d["Name"]=Name 
     d["Fact_checking"]=Fact_checking 
     d["Quote"]=quote 
     d["Economic_topic"]=Topic 
     d["Date"]=Date 
     d["Link"]=Link 
     d["Text"]=Text 
     l.append(d) 

     df=pandas.DataFrame(l) 
     df.to_csv("outing.csv") 

das Problem, dass wenn ich die Daten in CSV-Export nur ich 6 Reihen results.When bekomme ich drucke (df) und Druck (l) Es druckt alle Daten, die ich in der Liste habe, aber wenn ich len (l) überprüfe ich nur eine Länge von 6. Irgendwelche Ideen, warum das passiert ?? Vielen Dank im Voraus!

+0

Können Sie die Ausgabe von 'df.info()' am Ende Ihrer Frage hinzufügen. Stellen Sie sicher, dass Sie es so formatieren, dass es lesbar ist, bevor Sie es hinzufügen. – Nitred

+5

überschreiben Sie Ihre CSV-Datei in jeder Iteration der inneren Schleife ... – MaxU

+0

Verschieben Sie 'df = pandas.DataFrame (l)' und 'df.to_csv (" outing.csv ")' außerhalb der Schleife –

Antwort

2

Ziehen Sie in Betracht, eine Liste von Wörterbüchern zu erstellen, die in einzelne Datenrahmen mit pandas.DataFrame() verknüpft sind, und dann eine Liste einzelner Datenrahmen mit pandas.concat() für den endgültigen Datenrahmen zu verketten.

df_list = [] 

for d in all: 
    links=d.find_all("a") 
    len(links) 
    l=[] 

    for a in links[5:17]:  
     d={} 
     ... 
     d["Name"]=Name 
     d["Fact_checking"]=Fact_checking 
     d["Quote"]=quote 
     d["Economic_topic"]=Topic 
     d["Date"]=Date 
     d["Link"]=Link 
     d["Text"]=Text 
     l.append(d) 

    df_list.append(pandas.DataFrame(l)) 

final_df = pandas.concat(df_list) 
final_df.to_csv("outing.csv")