2017-11-18 5 views
0

Ich verwende CSVFeedSpider für das Scrappen einer lokalen CSV-Datei (foods.csv).Fehler bei der Verwendung von CSVFeedSpider

Hier ist sie:

calories name       price 

650   Belgian Waffles    $5.95 

900   Strawberry Belgian Waffles $7.95 

900   Berry-Berry Belgian Waffles $8.95 

600   French Toast     $4.50 

950   Homestyle Breakfast   $6.95 

Hier ist mein Code für foods.py Datei:

from scrapy.spiders import CSVFeedSpider 
from foods_csv.items import FoodsCsvItem 

class FoodsSpider(CSVFeedSpider): 
    name = 'foods' 
    start_urls = ['file:///users/Mina/Desktop/foods.csv'] 
    delimiter = ';' 
    quotechar = "'" 
    headers = ['name', 'price', 'calories'] 

    def parse_row(self, response, row): 
     self.logger.info('Hi, this is a row!: %r', row) 
     item = FoodsCsvItem() 
     item['name'] = row['name'] 
     item['price'] = row['price'] 
     item['calories'] = row['calories'] 
     return item 

items.py:

import scrapy 

class FoodsCsvItem(scrapy.Item): 
    name = scrapy.Field() 
    price = scrapy.Field() 
    calories = scrapy.Field() 

aber es gibt mir dieser Fehler:

2017-11-18 13:04:26 [scrapy.core.engine] DEBUG: Crawled (200) <GET file:///users/Mina/Desktop/foods.csv> (referer: None) 
2017-11-18 13:04:26 [scrapy.utils.iterators] WARNING: ignoring row 1 (length: 1, should be: 3) 
2017-11-18 13:04:26 [scrapy.utils.iterators] WARNING: ignoring row 2 (length: 1, should be: 3) 
2017-11-18 13:04:26 [scrapy.utils.iterators] WARNING: ignoring row 3 (length: 1, should be: 3) 
2017-11-18 13:04:26 [scrapy.utils.iterators] WARNING: ignoring row 4 (length: 1, should be: 3) 
2017-11-18 13:04:26 [scrapy.utils.iterators] WARNING: ignoring row 5 (length: 1, should be: 3) 
2017-11-18 13:04:26 [scrapy.utils.iterators] WARNING: ignoring row 6 (length: 1, should be: 3) 

Am Anfang habe ich nur ‚Name‘ und ‚Preis‘ aber es gab mir den gleichen Fehler kratzte so I ‚Kalorien‘ nach dieser Lösung Scrapy: Scraping CSV File - not getting any output aber nichts geändert hinzuzufügen versucht!

Ich brauche nur "Name" und "Preis" zu kratzen, wie kann ich das tun?

Antwort

1

Es ist wie möglicherweise das genaue Format der CSV-Datei verloren gegangen scheint, wenn es zu veröffentlichen. Wenn die Formatierung genau so lautet wie hier, sieht sie tatsächlich wie eine TSV-Datei (Tab Separated Values) aus und Sie könnten versuchen, die delimiter = ';' in delimiter = '\t' zu ändern.

Da Sie jedoch ' als Anführungszeichen angegeben haben, nehme ich an, dass das korrekt ist? Ich würde versuchen, eine Suche/ersetzen auf der CSV-Datei und ersetzen ' durch " und sehen, ob das hilft. Ich hatte einige seltsame Probleme, bevor ich die einfachen Anführungszeichen verwendete.

-1

Versuchen Sie, diese

def parse_row(self, response, row): 
     self.logger.info('Hi, this is a row!: %r', row) 
     item = FoodsCsvItem() 
     item['name'] = row['name'] 
     item['price'] = row['price'] 
     item['calories'] = row['calories'] 
     return item 
+0

Ok. Ich bearbeite es, aber es gibt mir den gleichen Fehler. – MAGS94

Verwandte Themen