Python中的.writerow()csv未写入所有数据

时间:2019-07-11 17:00:59

标签: python python-3.x csv dataframe

我是Python的新手,我正在尝试抓取一些数据并将其保存在csv中。 我试图用一个URL列表循环一个csv,从每个URL读取数据,然后将该信息写到另一个csv文件中

以下代码在cvs中写入了大约一半的数据,但是在写入时一切正常打印

df_link = pd.read_csv('url_list')

with open('url_list.csv', newline='') as urls, open('output.csv', 'w', newline='') as output:
    csv_urls = csv.reader(urls)
    csv_output = csv.writer(output)
    csv_output.writerow(['details','date'])

    for link in df_link.iterrows():
        url = link[1]['url']
        browser.get(url)
        soup = BeautifulSoup(browser.page_source)

        csv_file = open('output.csv', 'w')
        csv_writer = csv.writer(csv_file)
        csv_writer.writerow(['details'])


        details=[i.text for i in soup.find_all(class_='product-info-content- 
        block product-info')]
        print('details :', details)

        dt = date.today()
        print('date :', dt)

        csv_output.writerow([str(details).strip('[]'), dt])
        csv_file.close()

代码运行时,一切都可以正常打印,但并非所有数据行都被写入到csv输出中。

我希望有人能提供帮助。 谢谢!

1 个答案:

答案 0 :(得分:1)

好像您要打开两次output.csv,一次是在开头,然后是for循环。由于您使用w之类的csv_file = open('output.csv', 'w')选项打开,因此它将在每个循环中覆盖文件。

因此,如果将以下部分移出循环,则可能会更好

    csv_file = open('output.csv', 'w')
    csv_writer = csv.writer(csv_file)
    csv_writer.writerow(['details'])