在csv中存储刮取的数据

2024-05-28 20:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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模块非常陌生,我不知道如何以正确的格式存储刮取的数据

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

我希望在不同的行中使用不同的值

例如:评论|评级|模型|

但我就是不知道怎么做

我怎么做


Tags: csv数据textinimportforsizemodel
2条回答

要设置csv数据格式,最简单的方法之一是使用excel power查询清理数据,请执行以下步骤:

  1. 在excel中打开csv文件
  2. 使用ctrl+A选择所有值
  3. 然后从insert和CREATETABLE中单击table
  4. 创建表格后,单击顶部菜单中的数据,然后选择 来自表
  5. 知道他们会打开新的excel窗口增强查询能力
  6. 选择任意列并单击“拆分列”
  7. 拆分列中选择按分隔符
  8. 知道如何选择分隔符,如逗号、空格等
  9. 最后一步:选择高级选项,其中有两个 按行或列拆分选项

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

从代码中可以看出,您试图提取不同类型的记录:它们都是带有单个键的dict对象,其中键可能具有不同的值(“意见”、“审阅者”等)

在Scrapy中,将数据导出到CSV由^{}处理,其中the ^{} method是当前问题的关键所在,因为导出器在写入第一项之前需要知道字段列表(列名)

具体而言:

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

因此,有几种方法可以解决这个问题:

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

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

相关问题 更多 >

    热门问题