Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将数据从BeautifulSoup保存到CSV_Python_Python 3.x_Csv_Web Scraping_Export To Csv - Fatal编程技术网

Python:将数据从BeautifulSoup保存到CSV

Python:将数据从BeautifulSoup保存到CSV,python,python-3.x,csv,web-scraping,export-to-csv,Python,Python 3.x,Csv,Web Scraping,Export To Csv,我一直在尝试从网站下载数据,然后将其保存到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"): i

我一直在尝试从网站下载数据,然后将其保存到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。 我应该更改什么以使其工作?

编辑

将字符串追加到行列表时,请将其追加为列表

row\u data.append([row.get\u text('data-real-value')))

这样您就有了一个字符串列表

有关更好的示例,请参见

保持
writerows
如下,以便每行打印一项

with open(save_file, 'w') as save:
        writer = csv.writer(save, delimiter=';')
        writer.writerows(row)

因为它将在列表中的每个元素之间放置分隔符,所以从
行数据中创建每个长度为6(=1行)的子列表
列表():


(如前所述,
xrange
如果您使用的是Python3,则可能需要
range
;我使用的是Python2,并且是初学者,因此……

它不起作用,输出保持如下:
2017年5月31日;1.1240;1.1172;1.1252;1.1165;0.49%;2017年5月30日;1.1185;1.1163;1.1207;1.1108;0.18%;5月29日,
全部放在一行中。只需使用链接阅读,并使用
lineterminator='\n'
删除多余的空行
writerows(row)
不起作用,但我使用了@lukeAthank you的答案作为你的答案,它使脚本变得更好,但现在我需要删除csv中额外的空行。我刚刚将
open(保存文件'wb')
更改为
open(保存文件'w')
。现在,如何删除多余的空行?编辑:@njoose刚刚使用链接阅读了它,并使用了
lineterminator='\n'
@VascoFerreira-Hmm为什么要将wb设置回b?我假设您可以按照建议使用
wb
删除额外的换行符。(请参阅)@VascoFerreira,那么lineterminator是否可以替代wb?很高兴知道。如果您的问题已解决,您可以选择一个答案并将其标记为已解决。@lukeAI已更改,因为它出现以下错误:
TypeError:需要一个类似字节的对象,而不是“str”
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%
#...