在csv中存储废弃的数据

时间:2018-10-26 10:31:58

标签: python pandas csv web-scraping scrapy

我正在学习使用scrapy进行网页抓取。玩得很开心。唯一的问题是我无法以所需的方式保存抓取的数据。

以下代码从Amazon刮取评论。如何使数据的存储更好?

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request
import csv

class Oneplus6Spider(scrapy.Spider):
    name = 'oneplus6'
    allowed_domains = ['amazon.in']
    start_urls = ['https://www.amazon.in/OnePlus-Silk-White-128GB- 
    Storage/product-reviews/B078BNQ2ZS/ref=cm_cr_arp_d_viewopt_sr? 
    ie=UTF8&reviewerType=all_reviews&filterByStar=positive&pageNumber=1']

    def parse(self, response):

        writer = csv.writer(open('jack.csv','w+'))

        opinions = response.xpath('//*[@class="a-size-base a-link-normal 
        review-title a-color-base a-text-bold"]/text()').extract()

        for opinion in opinions:
            yield({'Opinion':opinion})

        reviewers = response.xpath('//*[@class="a-size-base a-link-normal 
        author"]/text()').extract()

        for reviewer in reviewers:
            yield({'Reviewer':reviewer})


         verified = response.xpath('//*[@class="a-size-mini a-color-state a- 
         text-bold"]/text()').extract()

         for verified_buyer in verified:
             yield({'Verified_buyer':verified_buyer})

          ratings = response.xpath('//span[@class="a-icon- 
          alt"]/text()').extract()

          for rating in ratings:
              yield({'Rating':rating[0]})


           model_bought = response.xpath('//a[@class="a-size-mini a-link- 
           normal a-color-secondary"]/text()').extract()

          for model in model_bought:
              yield({'Model':model})

我尝试使用scrapy的默认方式 -o 方法,也尝试使用csv。

数据存储在单行中。我对pandas和csv模块非常陌生,我不知道如何以正确的格式存储报废的数据?

它将所有值存储在一行中。

我想要不同行中的不同值

例如:评论|评分|型号|

但是我不知道怎么做

我该怎么办?

2 个答案:

答案 0 :(得分:1)

在您的代码中发现您尝试提取具有不同类型的记录:它们都是具有单个键的所有dict对象,其中键可能具有不同的值(“ Opinion”,“ Reviewer”等)。

在Scrapy中,将数据导出到CSV由CsvItemExporter处理,其中the _write_headers_and_set_fields_to_export method与您当前的问题很重要,因为出口商需要在写入第一个字段之前知道字段列表(列名称)项目。

特别是:

  1. 它将首先检查fields_to_export属性(通过Feed导出程序(related code hereFEED_EXPORT_FIELDS设置配置)
  2. 如果未设置:
    • 2.a。如果第一项是dict,它将使用其所有键作为列名。
    • 2.b。如果第一项是scrapy.Item,它将使用项定义中的键。

因此,有多种方法可以解决该问题:

  1. 您可以定义一个scrapy.Item类,其中包含您需要的所有可能的键,并在代码中产生此类型的项(对于任何特定记录,只需填写您需要的一个字段,将其他字段留空)。
  2. 或者,正确配置FEED_EXPORT_FIELDS设置,并保留现有代码的其他部分不变。

我想上面的提示就足够了。如果您需要更多示例,请告诉我。

答案 1 :(得分:0)

要设置 csv 数据格式,最简单的方法之一是使用 excel 电源查询清理数据,请按照下列步骤操作:

  1. 在 Excel 中打开 csv 文件。
  2. 使用 ctrl+A 选择所有值。
  3. 然后单击插入中的表并创建表。
  4. 创建表格后,点击顶部菜单中的数据并选择 来自表格
  5. 知道他们打开了新的 Excel 窗口强大的查询
  6. 选择任意列并点击拆分列
  7. 拆分列选择按分隔符
  8. 知道选择分隔符,如逗号、空格
  9. 最后一步:选择高级选项,其中有两个 选项拆分成行或列。

您可以使用这些强大的查询进行所有类型的数据清理,这是根据需要设置数据格式的最简单方法。