首页 > 解决方案 > Python - 如何在 csv 文件中格式化 scrapy 数据?

问题描述

我是 python 和网络抓取的新手,我尝试将抓取数据存储到 csv 文件,但输出并不令人满意。

当前的 csv 输出:

Title             Image
Audi,Benz,BMW     Image1,Image2,Image3

我想如何在 csv 文件中查看它:

Title     Image
Audi      Image1
Benz      Image2
BMW       Image3

这是在终端中运行它的类型:

scrapy crawl testscraper -t csv -o test.csv

这是spider.py:

class TestSpiderSpider(scrapy.Spider):
name = 'testscraper'
page_number = 2
start_urls = ['https://jamaicaclassifiedonline.com/auto/cars/']

    def parse(self, response):
    items = scrapeItem()

    product_title = response.css('.jco-card-title::text').extract()
    product_imagelink = response.css('.card-image img::attr(data-src)').getall()

    items['product_title'] = product_title
    items['product_imagelink'] = product_imagelink
    items.append('items')

    yield items

他是 items.py 的代码:

class scrapeItem(scrapy.Item):
product_title = scrapy.Field()
product_imagelink = scrapy.Field()

pass

标签: pythonweb-scrapingscrapy

解决方案


您可以选择每个包含汽车的 div 元素,然后遍历这些元素,逐个生成它们。

def parse(self, response):

        for car in response.css('.col.l3.s12.m6'):
            item = scrapeItem()

            product_title = car.css('.jco-card-title::text').get()
            product_imagelink = car.css('.card-image img::attr(data-src)').get()

            # Some of the elements don't contain a title or a image_link, like ads for example.
            if product_title and product_imagelink:

                item['product_title'] = product_title.strip().replace('\n', '')
                item['product_imagelink'] = product_imagelink

                yield item

推荐阅读