【问题标题】:Scrapy print items to csv, each in own rowScrapy打印项目到csv,每个在自己的行中
【发布时间】:2020-03-12 00:36:38
【问题描述】:

我正在通过 Scrapy 抓取亚马逊并尝试将产品的价格和名称导出到 csv 文件。当我这样做时,Scrapy 会将这些项目附加到一个列表中,并且 csv 的每一行都是该页面的产品列表(同样适用于价格列)。我希望将每个项目及其各自的价格打印到 CSV 文件中自己的行中。下面是我的抓取代码。

class ScrapeSpider(scrapy.Spider):
    name = 'scrape'
    start_urls = ['https://www.amazon.com/s?i=aps&k=laptop&ref=nb_sb_noss_1&url=search-alias%3Daps']

    def parse(self, response):

        item = AmazonItem()
        name = '\n'.join(response.css('.a-text-normal.a-color-base.a-size-medium').css('::text').extract())
        price = '\n'.join(response.css('.a-offscreen').css('::text').extract())

        item['name'] = name
        item['price'] = price

        yield item

        for next_page in response.css('.a-pagination .a-last a'):
            yield response.follow(next_page, self.parse)

A picture of the resulting csv file

下面是在终端中运行的代码来执行抓取:

scrapy crawl scrape -o data.csv

【问题讨论】:

标签: python csv scrapy


【解决方案1】:

创建一个包含每个项目的选择器列表,并遍历它们创建一个名为 product 的新选择器。然后单独提取数据。


def parse(self, response):
    items = response.css('.s-result-list .sg-col-inner')
    for product in items:
        item=AmazonItem()
        item['name'] = product.css('span.a-text-normal::text').get()
        item['price'] = product.css('.a-offscreen::text').get()
        yield item
    next_page = response.css('.a-last::attr(href)').get()
    if next_page:
        yield scrapy.Request(response.urljoin(next_page), callback=self.parse)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2017-03-28
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多