在 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的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中将 Wikipedia url 字符串转换为 URL 的问题