Python: Save data from BeautifulSoup to CSV
我一直在尝试从一个网站下载数据,然后将其保存到一个csv文件。问题是:我无法以正确的方式保存它来读取或导入数据库。
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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文件上的输出:
1 2 3 4 5 6 7 8 9 | M;a;y; ;3;1;,; ;2;0;1;7 1;.;1;2;1;8 1;.;1;1;7;2 1;.;1;2;2;0 .... |
我需要什么:
1 | May 31, 2017;1.1218;1.1172;1.1220;1.1165;0.30% |
如果你查看这个网站,所有的东西都在一个表格中,我需要类似的csv格式。我应该做些什么来让它工作?
从您的
1 2 3 4 5 6 7 8 9 | 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% #... |
(如本文所述,如果您使用的是python 3,那么
编辑
将字符串追加到行列表时,将其追加为列表
这样就有了一个字符串列表。
请参阅python csv库,即使在使用有效的lineterminator时,也会留下空行。
保留下面的EDOCX1[1]以每行打印一个项目。
1 2 3 | with open(save_file, 'w') as save: writer = csv.writer(save, delimiter=';') writer.writerows(row) |
因为它将在列表中的每个元素之间放置分隔符