Сравните записи файла CSV с выходными данными Python Scrapy

Я новичок в Python и парсинге веб-страниц. Пожалуйста, извините меня за мое невежество. В этой программе я просканировал некоторые URL-адреса и сохранил название продукта и цену в CSV-файле. Когда я снова запускаю скрипт, я хочу прочитать существующие записи csv (название продукта и цена), и если есть изменение цены на какой-либо продукт/ы, я хочу напечатать сообщение. Я борюсь с реализацией второй части программы, которая сравнивает значения с сохраненными записями csv. Пожалуйста помоги. Любая помощь будет высоко ценится.

import scrapy
from time import sleep
import csv, os, json
import random
import os

class spider1(scrapy.Spider):
    name = "spider1"

    with open("data.csv", "a") as filee:

        if os.stat("data.csv").st_size != 0:
            filee.truncate(0)
        filee.close()

    def start_requests(self):
        list = ["https://www.example.com/item1",
                "https://www.example.com/item2",
                "https://www.example.com/item3",
                "https://www.example.com/item4",
                "https://www.example.com/item5"
                ]

        for i in list:
            yield scrapy.Request(i, callback=self.parse)
            sleep(random.randint(0, 5))

    def parse(self, response):

        product_name = response.css('#pd-h1-cartridge::text')[0].extract()
        product_price = response.css(
            '.product-price .is-current, .product-price_total .is-current, .product-price_total ins, .product-price ins').css(
            '::text')[3].extract()


        with open('data.csv', 'a+') as file:

            itemwriter = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)

            itemwriter.writerow([str(product_name).strip(), str(product_price).strip()])

            file.close()

Вывод в формате CSV

Purple Wine Glass Cooler,1.47
Color Your Own VBS Island Wind Chimes,6.47
Color Your Own Fuzzy Patriotic Wreaths,7.79
Color Your Own Patriotic Keychains,6.19
Patriotic Cool Treats Craft Stick Magnet Craft Kit,6.19 

Я бы сделал две отдельные программы/скрипты: сначала для очистки данных в новый csv, а затем для сравнения значений в двух файлах csv.

furas 29.05.2019 01:49

если вы это сделаете filee.truncate(0), вы потеряете предыдущие данные и не сможете сравнить их с новыми значениями.

furas 29.05.2019 01:52

В scrapy есть встроенная функция для записи в csv. Вы можете запустить его с опцией -o data.csv или -t csv -o data.csv.

furas 29.05.2019 01:56

@furas Спасибо за советы. Если бы я использовал два скрипта, мне пришлось бы сканировать страницы 2 раза. Я хочу запускать этот скрипт как задание cron только 1-2 раза в день.

amal 29.05.2019 02:06

нет, вам не нужно сканировать 2 раза. Вы должны сканировать один раз в начале, чтобы получить первые данные, а позже (в cron) вам нужно сканировать один раз в день, чтобы получать новые данные, которые вы сравниваете с предыдущими данными. Второй скрипт используется только для сравнения данных в двух CSV-файлах, которые у вас есть на диске, а не для очистки новых данных.

furas 29.05.2019 02:22

если вы хотите сделать это в одном скрипте, вам нужно прочитать значения из data.csv, прежде чем использовать truncate(), а затем вы можете сравнить их с новыми значениями, которые вы получаете в parse()

furas 29.05.2019 02:54

@furas Спасибо. Попробую последние 2 совета. Метод 2 скриптов должен работать в моем случае.

amal 29.05.2019 03:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
884
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте Scrapy только для создания файлов CSV.

Напишите отдельный скрипт для сравнения файлов CSV.

Другие вопросы по теме