将Wikipedia表数据保存在文件中

时间:2017-02-06 03:52:46

标签: python numpy beautifulsoup

我正在尝试将Wikipedia表保存为平面文件。页面上有五个表,但我的代码只选择了最后一个表。 在尝试将数据写入文件时,出现以下错误:

  

IndexError:元组索引超出范围

from bs4 import BeautifulSoup
import pandas as pd
from pandas import DataFrame
import urllib.request as urr
import os
import codecs
import csv

wiki = "https://en.wikipedia.org/wiki/Sixteenth_Legislative_Assembly_of_Uttar_Pradesh"
header = {'User-Agent': 'Mozilla/5.0'} #Needed to prevent 403 error on Wikipedia
req = urr.Request(wiki,headers=header)
page = urr.urlopen(req)
soup = BeautifulSoup(page, "lxml")
delimiter=',',quoting=csv.QUOTE_ALL)


lacDataSaved="#,Assembly,Name,Party,Reserved,ID,District,LS,Comments"
# find all table ,get the first
table = soup.find_all('table', class_="wikitable")[4] # Only use the first table
# iterate over it
for record in table.findAll('tr'):
    lacData=""
    for data in record.findAll('td'):
        lacData=lacData+","+data.text
    lacDataSaved=lacDataSaved+"\n"+lacData[1:]

#print(lacDataSaved)

import numpy as np
np.savetxt("file_name.csv", lacDataSaved, delimiter=",")

我也尝试过使用python csv库,但我在那里遗漏了一些东西。

1 个答案:

答案 0 :(得分:1)

您收到该错误是因为您的一个或多个表行似乎是缺少数据的格式化行。你的循环没有填充lacData中的两个+元素,所以当你要求lacData[1:]时,Python抛出IndexError,因为第二个索引不存在 - 因此切片不会#39; t。或者

您可以使用pandas.read_html来避免所有这些。不是100%肯定它会为这个复杂的桌子工作,但是你应该试一试:

import pandas as pd
[...get the table data into a BeautifulSoup object...]
my_data = pd.read_html(str(table))