3
votes

Scrape la table Wikipedia en CSV en Python

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)


0 commentaires

3 Réponses :


1
votes

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.


0 commentaires

2
votes

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.


0 commentaires

1
votes

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.


0 commentaires