【问题标题】:Writing results of a python script to CSV将 python 脚本的结果写入 CSV
【发布时间】:2018-04-26 08:08:52
【问题描述】:

我正在使用我在 Github 上找到的这个亚马逊评论抓取工具:https://github.com/philipperemy/amazon-reviews-scraper

        for review in reviews_list:
             rating = review.find(attrs={'data-hook': 'review-star-rating'}).attrs['class'][2].split('-')[-1]
             body = review.find(attrs={'data-hook': 'review-body'}).text
             date = review.find(attrs={'data-hook': 'review-date'}).text
             title = review.find(attrs={'data-hook': 'review-title'}).text

             logging.info('***********************************************')
             logging.info(title)
             logging.info(date)
             logging.info(rating)
             logging.info(body)
             logging.info('***********************************************\n')
             reviews.append({'title': title,
                             'rating': rating,
                             'body': body,
                             'product_id': product_id
                            })

              return reviews

我希望将这些结果发送到 CSV 文件。但我只是 Python 的初学者,所以我不完全确定。我在 Windows 上使用 Python。

在 Akshat 的帮助下,我得到了这个,但我不确定它是否正确:

        for review in reviews_list:
            rating = review.find(attrs={'data-hook': 'review-star-rating'}).attrs['class'][2].split('-')[-1]
            body = review.find(attrs={'data-hook': 'review-body'}).text
            date = review.find(attrs={'data-hook': 'review-date'}).text
            title = review.find(attrs={'data-hook': 'review-title'}).text

from csv import DictWriter

with open('results.csv', 'w') as csvfile:
    fieldnames = ['title', 'date', 'rating', 'body']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()

    for review in reviews: 
        writer.writerow(review)

【问题讨论】:

  • 附加说明 - SO 不是免费的编码服务 - 你必须得到帮助 - 尽你所能尝试一些事情 - 然后在你的代码中出现问题以寻求帮助
  • 确实如此。我更新了我的帖子以反映它。从昨天开始,我一直在尝试任何事情,但真的一无所获。

标签: python csv web-scraping


【解决方案1】:

你的问题在这里:

    writer.writerow(title, date, rating, body)

writerow 需要一个序列。改为这样做:

    writer.writerow([title, date, rating, body])

该行需要位于通过reviews 的循环内。

【讨论】:

  • 谢谢。所以我试图用下面的替换整个日志序列,但它似乎不起作用。应该是? import csv with open('results.csv', 'w') as f: writer = csv.writer(f, delimiter=',') writer.writerow([title, date, rating, body])
【解决方案2】:

除了@BoarGules指出的错误。我建议你从 CSV 模块探索DictWriter

from csv import DictWriter

with open('results.csv', 'w') as csvfile:
    fieldnames = ['title', 'date', 'rating', 'body']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()

    for review in reviews: 
        writer.writerow(review)

【讨论】:

  • 我已将其添加到脚本中,它告诉我 Traceback(最近一次调用最后一次):文件“amazon_cmets_scraper.py”,第 3 行,在 中来自 core_extract_cmets 导入 * 文件“C: \Users\jrath\ars\core_extract_cmets.py",第 74 行 import DictWriter from csv ^ SyntaxError: invalid syntax
  • 现在检查,导入语句的顺序有问题
  • 我认为我做错了什么,这应该在我的脚本中放在哪里,我应该用它替换什么?
  • 我更新了我的原始帖子以反映我现在所拥有的。我仍然收到一个错误: Traceback(最近一次调用最后一次):文件“amazon_cmets_scraper.py”,第 3 行,在 中来自 core_extract_cmets import * 文件“C:\Users\jrath\ars\core_extract_cmets.py”,第 59 行来自 csv 导入 DictWriter ^ IndentationError: expected an indented block
  • 你仍然需要你在reviews.append 中的代码。我的建议仅与生成 CSV 相关
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2015-02-18
  • 2013-09-24
相关资源
最近更新 更多