我一直在尝试从网站下载数据,然后将其保存到csv文件中。问题是:我无法以适当的方式保存它来读取它或导入数据库。
这是我的代码:
import csv
import requests
from bs4 import BeautifulSoup
def getData(url_to_scrap='https://www.investing.com/currencies/eur-usd-historical-data', file=None, save_file="Name.csv"):
if url_to_scrap is not None:
header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
r = requests.get(url_to_scrap, headers=header)
data = BeautifulSoup(r.content, 'html.parser')
else:
data = BeautifulSoup(open(file, encoding='utf8'), 'html.parser')
table = data.find(id='curr_table')
table = table.find_all('td')
row_data = []
for row in table:
row_data.append(row.get_text('data-real-value'))
with open(save_file, 'w') as save:
for row in row_data:
writer = csv.writer(save, delimiter=';')
writer.writerow(row)
getData(save_file="EUR USD Historical Data.csv")
CSV文件的输出:
M;a;y; ;3;1;,; ;2;0;1;7
1;.;1;2;1;8
1;.;1;1;7;2
1;.;1;2;2;0
....
我需要什么:
May 31, 2017;1.1218;1.1172;1.1220;1.1165;0.30%
如果您查看网站,一切都在表格中,我需要在csv中使用它。 我应该改变什么才能使它发挥作用?
答案 0 :(得分:0)
修改强>
当您将字符串附加到行列表时,将其作为列表附加
row_data.append([row.get_text('data-real-value')])
这样你就有了一系列字符串列表。
请参阅Python csv library leaves empty rows even when using a valid lineterminator以获得更好的示例。
保持writerows
如下所示,每行打印一个项目。
with open(save_file, 'w') as save:
writer = csv.writer(save, delimiter=';')
writer.writerows(row)
因为它会在列表中的每个元素之间放置分隔符
答案 1 :(得分:0)
从row_data
列表(via)制作长度为6(= 1行)的子列表:
with open(save_file, 'wb') as save:
writer = csv.writer(save, delimiter=';')
for row in [row_data[x:x+6] for x in xrange(0, len(row_data), 6)]:
writer.writerow(row)
#May 31, 2017;1.1242;1.1172;1.1252;1.1165;0.51%
#May 30, 2017;1.1185;1.1163;1.1207;1.1108;0.18%
#May 29, 2017;1.1165;1.1177;1.1192;1.1159;-0.16%
#...
(如上所述here,如果您使用的是Python 3,xrange
可能需要range
;我是Python 2和初学者,所以...)