Scrapy не создает выходной файл .csv - PullRequest
1 голос
/ 28 марта 2019

Я создал паука, используя селен и скрап, который показывает, что он до сих пор царапает вещи, используя вчерашний сценарий. Я смог записать вывод в файл CSV, но теперь днем ​​он показал, что скрап не был распознанная команда вместе с python и pip

поэтому я установил все с нуля, включая python, и когда я попытался запустить паука после, паук работает гладко, но не пишет предпочтительным образом, как раньше.

Высовываю мне мозги из 4 часов, но не могу найти способ, если кто-нибудь может мне помочь, и я буду очень признателен за следующие вещи, которые вам требуются

Я пытался несколько раз менять конвейеры

settings.py

BOT_NAME = 'mcmastersds'

SPIDER_MODULES = ['grainger.spiders']
NEWSPIDER_MODULE = 'grainger.spiders'

LOG_LEVEL = 'INFO'





ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {'grainger.pipelines.GraingerPipeline': 300,}
DOWNLOAD_DELAY = 1
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36 OPR/43.0.2442.806'

PROXY_MODE = 0
RETRY_TIMES = 0

SPLASH_URL = 'http://localhost:8050'


SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

pipelines.py

import csv
import os.path
from scrapy.loader import ItemLoader
from scrapy.loader.processors import TakeFirst, MapCompose, Join



class GraingerPipeline(object):
    def __init__(self):
        if not os.path.isfile('CONTENT_psysci.csv'):
            self.csvwriter = csv.writer(open('safale.csv', 'a',newline="",encoding='utf8'))
            self.csvwriter.writerow(['url','Title','sellername','travlink','travlink1','rating','Crreview','feature','Description','proddescription','Additonalinfo','details','detailsextended','producttable','stockstatus','newseller','condition','deliverystatus','price','bestsellersrank','mainimage','subimage'])

    def process_item(self, item, spider):
        self.csvwriter.writerow([item['url'],item['title'],item['sellername'],item['travlink'],item['travlink1'],item['rating'],item['Crreview'],item['feature'],item['Description'],item['proddescription'],item['Additonalinfo'],item['details'],item['detailsextended'],item['producttable'],item['stockstatus'],item['newseller'],item['condition'],item['deliverystatus'],item['price'],item['bestsellersrank'],item['mainimage'],item['subimage']])
        return item

Вы можете помочь мне в этом

1 Ответ

2 голосов
/ 28 марта 2019

Если вы просто хотите написать элементы без каких-либо конкретных данных, я бы предложил использовать функцию feed export .В Scrapy имеется встроенный экспортер каналов CSV .

Причина, по которой ваш код не работает выше, заключается в том, что вы никогда не закрываете файл csv, который открываете в своем выражении инициализации self.csvwriter.

Вы должны использовать методы open_spider и close_spider, чтобы открыть файл и закрыть его после обработки элементов, взгляните на пример json pipe в документах scrapy, которыеаналогично.

Таким образом, ваш конвейер выше должен быть адаптирован к следующему коду:

class GraingerPipeline(object):

    csv_file = None

    def open_spider(self):
        if not os.path.isfile('CONTENT_psysci.csv'):
            self.csvfile = open('safale.csv', 'a',newline="",encoding='utf8')
            self.csvwriter = csv.writer(self.csvfile)
            self.csvwriter.writerow(['url','Title','sellername','travlink','travlink1','rating','Crreview','feature','Description','proddescription','Additonalinfo','details','detailsextended','producttable','stockstatus','newseller','condition','deliverystatus','price','bestsellersrank','mainimage','subimage'])

    def process_item(self, item, spider):
        self.csvwriter.writerow([item['url'],item['title'],item['sellername'],item['travlink'],item['travlink1'],item['rating'],item['Crreview'],item['feature'],item['Description'],item['proddescription'],item['Additonalinfo'],item['details'],item['detailsextended'],item['producttable'],item['stockstatus'],item['newseller'],item['condition'],item['deliverystatus'],item['price'],item['bestsellersrank'],item['mainimage'],item['subimage']])
        return item

    def close_spider(self):
        if self.csv_file:
            self.csv_file.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...