当输出到CSV时,为什么要一遍又一遍地写同一行?

时间:2018-04-09 20:29:08

标签: python csv web-scraping export-to-csv

我已经制作了一个网页抓取应用,我希望将数据放入csv文件中。刮刀部分工作正常并打印到命令行,但是当我尝试写入csv时,它会反复重复第一行的循环数据(第100行)的迭代。我不确定为什么。有什么想法为什么它不是每次都把结果写成新的一行? (我已尝试使用csv.writer和csv.DictWriter方法。结果相同。)

def create_csv_file():
    file_name = str(datetime.date.today())
    field_names = ['Rank', 'Title', 'Author', 'Star Rating', 'Price']
    with open('{}.csv'.format(file_name), 'w', newline='') as csvfile:
        the_writer = csv.DictWriter(csvfile, fieldnames=field_names)
        the_writer.writeheader()

    return file_name, field_names

def get_book_details(soup, file, headers):
    items = soup.find_all('div', class_='zg_itemImmersion')

    for i in items:
        #Web Scrape code here. Cut to truncate.

        with open('{}.csv'.format(file), 'w', newline='', encoding='utf-8') as csvfile:
            the_writer = csv.DictWriter(csvfile, fieldnames=headers)
            the_writer.writerow({'Rank': rank, 'Title': title, 'Author': author, 'Star Rating': star_rating, 'Price': price})

1 个答案:

答案 0 :(得分:0)

每次循环迭代,关闭CSV文件,返回循环顶部,然后再次打开文件。这将返回到文件的开头。如果每次循环都必须打开它,请使用'a'附加模式。

或者,在进入循环之前打开文件;将for放在with区块内。