我无法完全掌握csv。得到...
数据:
0 ... 5
0 Project Name ... Other Details
1 SKV S ANANDA VILAS ... SKV S ANANDA VILAS
2 Project Name ... Other Details
3 SKV S ANANDA VILAS ... SKV S ANANDA VILAS
4 Project Name ... Other Details
5 SKV S ANANDA VILAS ... SKV S ANANDA VILAS
6 Project Name ... Other Details
7 SKV S ANANDA VILAS ... SKV S ANANDA VILAS
8 Project Name ... Other Details
9 SKV S ANANDA VILAS ... SKV S ANANDA VILAS
10 Project Name ... Other Details
11 SKV S ANANDA VILAS ... SKV S ANANDAM VILAS
修改
import pandas as pd
import requests
import json, csv
from bs4 import BeautifulSoup
from tabulate import tabulate
from pandas.io.json import json_normalize
res = requests.get("http://rerait.telangana.gov.in/PrintPreview/PrintPreview/UHJvamVjdElEPTQmRGl2aXNpb249MSZVc2VySUQ9MjAyODcmUm9sZUlEPTEmQXBwSUQ9NSZBY3Rpb249U0VBUkNIJkNoYXJhY3RlckQ9MjImRXh0QXBwSUQ9")
soup = BeautifulSoup(res.content,'html.parser')
table_data = []
for i in range(len(soup.find_all('table'))):
table = soup.find_all('table')[i]
df = pd.read_html(str(table))
#print (df)
with open('D:/out_table.csv', 'a') as outcsv:
#configure writer to write standard csv file
writer = csv.writer(outcsv, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')
for item in df:
for i in range(len(item)):
print (item[0: i])
writer.writerow(item[0: i])
通过使用上面的代码,可以写入csv文件,但是我得到了一些数据…………请提出如何以Web或propare格式相同地写入所有数据的建议。
或尝试过
for i in range(len(soup.find_all('table'))):
table = soup.find_all('table')[i]
df = pd.read_html(str(table))
table_data.append(df)
my_df = pd.DataFrame(table_data)
for i in range(len(my_df)):
my_df.loc[[i]].to_csv('D:/my_csv.csv',
index=True,
header=True,
mode='a')
如何以正确的格式获取所有数据?
答案 0 :(得分:0)
如果创建并打印了Pandas数据框,Pandas将基于某些输出默认值显示该表的摘要,即为跳过的列显示...
。不过,可以使用各种set_option()
参数来更改这些默认值:
pd.set_option('display.max_rows', 500)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1500)
您的代码似乎正在尝试从该URL提取所有表并将它们全部写入单个CSV文件。 read_html()
也可以使用URL,并将自动返回数据帧列表。这样避免了先使用requests
或beautifulsoup
对其进行解析的需要。因此您的代码可能变成:
import pandas as pd
tables = pd.read_html("http://rerait.telangana.gov.in/PrintPreview/PrintPreview/UHJvamVjdElEPTQmRGl2aXNpb249MSZVc2VySUQ9MjAyODcmUm9sZUlEPTEmQXBwSUQ9NSZBY3Rpb249U0VBUkNIJkNoYXJhY3RlckQ9MjImRXh0QXBwSUQ9", header=0)
with open('out_table.csv', 'w') as outcsv:
for table in tables:
if not table.empty: # skip empty dataframes
table.to_csv(outcsv, mode='a', index=False, sep='|')
如果需要进一步处理,则需要先使用Pandas调用将tables
中的每个表重新格式化为所需格式,然后再将它们全部写入CSV格式。我建议通过表头识别每个表,然后应用适当的格式。例如,您可以删除不需要的列。您可能还想合并一些表。
通过表头标识每个表的原因是其他URL可能不包含同一组表。