在 Python 中将 Wikipedia 表刮到 CSV

Posted

技术标签:

【中文标题】在 Python 中将 Wikipedia 表刮到 CSV【英文标题】:Scrape Wikipedia table to CSV in Python 【发布时间】:2019-07-13 16:51:00 【问题描述】:

我正在使用 python 从 Wikipedia 中抓取一个表格。我已经完成了代码,但是在将特定列提取到 CSV 并添加封闭的双撇号时遇到了一些问题。

我只想提取以下列名称:

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

这是表格的结果:

这是我的代码:

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)

【问题讨论】:

【参考方案1】:

这个怎么样?

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

保持简单。

【讨论】:

最后一行应该是 tables.to_csv("wiki.csv", sep='\t')【参考方案2】:

您可以将数据框中的列指定为:

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

然后只需插入所需的值。

【讨论】:

【参考方案3】:

将***页面的表格转换为 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()) (Select Columns)

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

我不确定双引号有什么问题。

【讨论】:

以上是关于在 Python 中将 Wikipedia 表刮到 CSV的主要内容,如果未能解决你的问题,请参考以下文章

python 将循环刮到pd数据帧

python 将所有html选择标签项目刮到网站上

在 Swift 中将 Wikipedia url 字符串转换为 URL 的问题

如何在 Python 中编写与 Wikipedia 中的示例不同的策略模式?

使用 Python 获取 Wikipedia 文章

python WIkipedia_Scrape_Lists