Скрести таблицу из Википедии в CSV на Python - PullRequest
0 голосов
/ 20 февраля 2019

Я очищаю таблицу из Википедии, используя python.Я закончил с кодом, но у меня возникли некоторые проблемы при извлечении определенных столбцов в CSV и добавлении двойных апострофов.

Я хочу извлечь только следующие имена столбцов:

Kode BPS, Nama, Ibu Kota, Populasi, Luas, Pulau.

Вот результат таблицы:

enter image description here

А вот мой код:

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 ]

0 голосов
/ 12 марта 2019

Как насчет этого?

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')

Не усложняйте.

0 голосов
/ 25 августа 2019

Чтобы преобразовать таблицы страницы Википедии в CSV ( pd.read_html () ) ( df.empty ) ( df.to_csv () ) :

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=',')

Чтобы очистить эту точную таблицу и выбрать конкретные столбцы ( df.rename () ) ( Выберите столбцы ) :

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=',')

Я не уверен, что у вас проблема с двойными кавычками.

0 голосов
/ 20 февраля 2019

Вы можете указать столбцы в кадре данных как:

columns = ['Kode BPS', 'Nama', 'Ibu Kota', 'Populasi', 'Luas', 'Pulau']
df = pd.DataFrame(columns=columns)

Затем просто введите необходимые значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...