Я хочу использовать элемент 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 в моем коде?Я думал, что смогу вставить его в Класс продукта, но не могу включить метод отправки ...