当前位置: 首页 > 知识库问答 >
问题:

废弃管道以正确格式导出csv文件

冷善
2023-03-14

我根据下面亚历克斯的建议进行了改进。我需要的是下面的图片。然而,每一行/每一行应该是一个评论:带有日期、评级、评论文本和链接。

我需要让项目处理者处理每一页的每次审查
目前,TakeFirst()只对页面进行第一次审阅。所以10页,我只有10行,如下图所示。

蜘蛛代码如下:

import scrapy
from amazon.items import AmazonItem

class AmazonSpider(scrapy.Spider):
   name = "amazon"
   allowed_domains = ['amazon.co.uk']
   start_urls = [
    'http://www.amazon.co.uk/product-reviews/B0042EU3A2/'.format(page) for      page in xrange(1,114)

]

def parse(self, response):
    for sel in response.xpath('//*[@id="productReviews"]//tr/td[1]'):
        item = AmazonItem()
        item['rating'] = sel.xpath('div/div[2]/span[1]/span/@title').extract()
        item['date'] = sel.xpath('div/div[2]/span[2]/nobr/text()').extract()
        item['review'] = sel.xpath('div/div[6]/text()').extract()
        item['link'] = sel.xpath('div/div[7]/div[2]/div/div[1]/span[3]/a/@href').extract()

        yield item

共有2个答案

赵佐
2023-03-14

如果使用< code>-t csv(如Frank在评论中所建议的)由于某种原因对您不起作用,您总是可以在自定义管道中直接使用内置的< code>CsvItemExporter,例如:

from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter


class AmazonPipeline(object):
    @classmethod
    def from_crawler(cls, crawler):
        pipeline = cls()
        crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
        crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
        return pipeline

    def spider_opened(self, spider):
        self.file = open('output.csv', 'w+b')
        self.exporter = CsvItemExporter(self.file)
        self.exporter.start_exporting()

    def spider_closed(self, spider):
        self.exporter.finish_exporting()
        self.file.close()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

您需要将它添加到< code>ITEM_PIPELINES中:

ITEM_PIPELINES = {
    'amazon.pipelines.AmazonPipeline': 300
}

此外,我还将使用带有输入和输出处理器的ItemLoader来连接审阅文本并用空格替换新行。创建ItemLoader类:

from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import TakeFirst, Join, MapCompose


class AmazonItemLoader(ItemLoader):
    default_output_processor = TakeFirst()

    review_in = MapCompose(lambda x: x.replace("\n", " "))
    review_out = Join()

然后,用它来构造一个Item

def parse(self, response):
    for sel in response.xpath('//*[@id="productReviews"]//tr/td[1]'):
        loader = AmazonItemLoader(item=AmazonItem(), selector=sel)

        loader.add_xpath('rating', './/div/div[2]/span[1]/span/@title')
        loader.add_xpath('date', './/div/div[2]/span[2]/nobr/text()')
        loader.add_xpath('review', './/div/div[6]/text()')
        loader.add_xpath('link', './/div/div[7]/div[2]/div/div[1]/span[3]/a/@href')

        yield loader.load_item()

贾沛
2023-03-14

我从零开始,下面的蜘蛛应该用

scipy crawl亚马逊-t csv-o亚马逊。csv--loglevel=INFO(信息)

所以用电子表格打开CSV-File会显示给我。

希望这能有所帮助:-)

import scrapy

class AmazonItem(scrapy.Item):
    rating = scrapy.Field()
    date = scrapy.Field()
    review = scrapy.Field()
    link = scrapy.Field()

class AmazonSpider(scrapy.Spider):

    name = "amazon"
    allowed_domains = ['amazon.co.uk']
    start_urls = ['http://www.amazon.co.uk/product-reviews/B0042EU3A2/' ]

    def parse(self, response):

        for sel in response.xpath('//table[@id="productReviews"]//tr/td/div'):

            item = AmazonItem()
            item['rating'] = sel.xpath('./div/span/span/span/text()').extract()
            item['date'] = sel.xpath('./div/span/nobr/text()').extract()
            item['review'] = sel.xpath('./div[@class="reviewText"]/text()').extract()
            item['link'] = sel.xpath('.//a[contains(.,"Permalink")]/@href').extract()
            yield item

        xpath_Next_Page = './/table[@id="productReviews"]/following::*//span[@class="paging"]/a[contains(.,"Next")]/@href'
        if response.xpath(xpath_Next_Page):
            url_Next_Page = response.xpath(xpath_Next_Page).extract()[0]
            request = scrapy.Request(url_Next_Page, callback=self.parse)
            yield request
 类似资料:
  • 我正在寻找一个正则表达式来识别管道分隔的csv文件中出现的未转义双引号字符。也就是说,文件是以管道分隔的,每个字段都用双引号括起来,但有些字段包含单双引号字符,应该用额外的双引号转义,以符合RFC4180的要求<例如。 "字段1"|"字段2""文本中的文本""|"正确" "字段1"|"字段2"文本中的文本"|"不正确" 因为在第一行中,一个双引号已正确转义为另一个双引号字符。 我在找一个测试来找出

  • Node.js may deprecate APIs when either: (a) use of the API is considered to be unsafe, (b) an improved alternative API has been made available, or (c) breaking changes to the API are expected in a fut

  • 框架说明 为了更友好和便利的维护废弃API ,将通过三个函数来实现: markAsWarning 对给予对象上的属性中嵌入一个警告,给予对象需要存在该属性。 removeProperty 重新定义给予对象上移除的属性,并嵌入一个报错,给予对象应不存在该属性。 replaceProperty 重新定义给予对象上移除的属性,并嵌入一个警告和调用新的属性,参数不兼容的需要进行适配,给予对象应不存在该属性

  • 下表所示为 CampusBuilder 中支持的文件导出格式。 序号 分类 格式 名称 说明 1 ThingJS .tjs ThingJS 场景包2020 由 ThingJS 场景文件和自定义模型组成。此格式的文件只能由 ThingJS 打开。 2 ThingJS .tjs ThingJS 场景包2019 由 ThingJS 场景文件和自定义模型组成。此格式的文件只能由 ThingJS 打开。 3

  • 问题内容: 以下代码获取结果,该结果适用于PDF和XLSX。对于HTML,会引发异常。 HTML的例外情况是 : 对于v6.0和v5.6,该错误相同。这曾经在v5.0中可用(某些类在v5.6中已弃用)。 如何导出各种格式的报告,包括HTML? 问题答案: 对于HTML和其他格式: 使用以下命令调用它:

  • 我正在将一个csv文件导入SAS,其中包含一个使用类似于worddatxw的word日期格式的字段。但对于日期后的字母(例如,1而不是1): 我已经走了这么远: 我无法确定如何使用proc import将其导入SAS,同时在SAS内将其转换为可用日期。 我是SAS初学者,所以请使用外行术语。谢谢!:)