Je récupère un tableau de Wikipedia en utilisant python. J'ai terminé avec le code, mais j'ai quelques problèmes pour extraire des colonnes spécifiques au format CSV et ajouter des apostrophes doubles englobantes.
Je souhaite extraire uniquement les noms de colonnes suivants:
import requests from bs4 import BeautifulSoup import pandas as pd URL = 'https://id.wikipedia.org/wiki/Demografi_Indonesia' response = requests.get(URL) soup = BeautifulSoup(response.text,'html.parser') table = soup.find('table',{'class':'wikitable sortable'}).tbody rows = table.find_all('tr') columns = [v.text.replace('\n','') for v in rows[0].find_all('th')] df = pd.DataFrame(columns=columns) for i in range(1,len(rows)): tds = rows[i].find_all('td') if len(tds)==4: values = [tds[0].text, tds[1].text, tds[2].text, tds[3].text.replace('\n',''.replace('\xa0',''))] else: values = [td.text.replace('\n',''.replace('\xa0','')) for td in tds] df = df.append(pd.Series(values, index=columns), ignore_index=True) #print(df) df.to_csv(r'C:\Users\Desktop\'+'\\report.csv',index=False)
3 Réponses :
Vous pouvez spécifier les colonnes du dataframe comme suit:
columns = ['Kode BPS', 'Nama', 'Ibu Kota', 'Populasi', 'Luas', 'Pulau'] df = pd.DataFrame(columns=columns)
Ensuite, insérez simplement les valeurs requises.
Que diriez-vous de cela?
import pandas as pd link = "https://id.wikipedia.org/wiki/Demografi_Indonesia" tables = pd.read_html(link,header=0)[2] df.to_csv(tables, sep='\t')
Restez simple.
Pour convertir les tableaux de la page Wikipédia en CSV ( pd.read_html () ) ( df.empty ) ( df.to_csv () ) :
import pandas as pd link = "https://id.wikipedia.org/wiki/Demografi_Indonesia" df = pd.read_html(link, header=0)[2] df = df.rename(columns={'Populasi[4]':'Populasi', 'Luas (km²)[5]':'Luas'}) df = df[['Kode BPS', 'Nama', 'Ibu kota', 'Populasi', 'Luas', 'Pulau']] df.to_csv("Indonesia.csv", sep=',')
Pour gratter ce tableau exact et sélectionner des colonnes spécifiques ( df.rename () ) ( Sélectionner des colonnes ) : strong>
import pandas as pd def wiki_to_csv(wikiurl = str): tname = link.split("/")[-1] tables = pd.read_html(link, header=0) for i in range(len(tables)): if not tables[i].empty: fname = tname + " table " + str(i) tables[i].to_csv(fname, sep=',')
Je ne suis pas sûr du problème que vous rencontrez avec les guillemets doubles.