Scrapy использовать элемент и сохранить данные в файле JSON - PullRequest
0 голосов
/ 06 мая 2019

Я хочу использовать элемент scrapy, манипулировать данными и сохранять все в json-файле (используя json-файл, например, в виде базы данных).

# Spider Class

class Spider(scrapy.Spider):
    name = 'productpage'
    start_urls = ['https://www.productpage.com']

    def parse(self, response):
        for product in response.css('article'):

            link = product.css('a::attr(href)').get()
            id = link.split('/')[-1]
            title = product.css('a > span::attr(content)').get()
            product = Product(self.name, id, title, price,'', link)
            yield scrapy.Request('{}.json'.format(link), callback=self.parse_product, meta={'product': product})

        yield scrapy.Request(url=response.url, callback=self.parse, dont_filter=True)

    def parse_product(self, response):
        product = response.meta['product']
        for size in json.loads(response.body_as_unicode()):
            product.size.append(size['name'])

        if self.storage.update(product.__dict__):
            product.send('url')


# STORAGE CLASS

class Storage:

    def __init__(self, name):
        self.name = name
        self.path = '{}.json'.format(self.name)
        self.load()  """Load json database"""

    def update(self, new_item):
        # .... do things and update data ...
        return True

# Product Class

class Product:

    def __init__(self, name, id, title, size, link):
        self.name = name
        self.id = id
        self.title = title
        self.size = []
        self.link = link

    def send(self, url):
        return  # send notify...


Поиск в классе Spider товаров на главной странице start_url, затемОн анализирует страницу продукта, чтобы поймать также размеры.Наконец, он ищет, есть ли обновления на self.storage.update(product.__dict__) и если это правда, отправьте уведомление.

Как я могу реализовать Item в моем коде?Я думал, что смогу вставить его в Класс продукта, но не могу включить метод отправки ...

...