In [ ]:
import os
import sys
from django.utils import timezone
sys.path.append('/home/ubuntu/anodos.ru/anodos/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'anodos.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
import re
import catalog.runner
from catalog.models import *
class Runner(catalog.runner.Runner):
name = 'Elko'
alias = 'elko'
url = {
'start' : 'https://ecom.elko.ru/Account/Login',
'login' : 'https://ecom.elko.ru/Account/Login',
'price' : 'https://ecom.elko.ru/Catalog/PriceList?'}
def __init__(self):
super().__init__()
self.stock = self.take_stock('stock', 'склад', 3, 10)
self.transit = self.take_stock('transit', 'транзит', 10, 60)
def run(self):
# Заходим на начальную страницу
tree = self.load_html(self.url['start'])
token = self.xpath_string(tree, './/input[@name="__RequestVerificationToken"]/@value')
self.login({'__RequestVerificationToken': token,
'Amnesia': '',
'Username': self.updater.login,
'Password': self.updater.password,
'submit': 'Войти',
'Username2': ''})
data = self.load(self.url['price'], result_type = 'content')
return data
In [ ]:
s = Runner()
data = s.run()
In [ ]:
import xlrd
# Номера строк и столбцов
num = {'header': 5}
# Распознаваемые слова
word = {'category': 'Категория',
'category_sub': 'Подкатегория',
'party_article': 'Код ELKO',
'product_vendor': 'Производитель',
'product_article': 'Заводской код',
'product_name': 'Название и описание продукта',
'product_description': 'Дополнительная информация',
'party_price': 'Цена',
'party_quantity': 'В наличии',
'product_warranty': 'Гарантия',
'product_url': 'Ссылка на товар'}
book = xlrd.open_workbook(file_contents = data)
In [ ]:
sheet = book.sheet_by_index(0)
In [ ]:
for row_num in range(sheet.nrows):
row = sheet.row_values(row_num)
# Пустые строки
if row_num < num['header']:
continue
# Заголовок таблицы
elif row_num == num['header']:
for cel_num, cel in enumerate(row):
if str(cel).strip() == word['category']:
num['category'] = cel_num
elif str(cel).strip() == word['category_sub']:
num['category_sub'] = cel_num
elif str(cel).strip() == word['party_article']:
num['party_article'] = cel_num
elif str(cel).strip() == word['product_vendor']:
num['product_vendor'] = cel_num
elif str(cel).strip() == word['product_article']:
num['product_article'] = cel_num
elif str(cel).strip() == word['product_name']:
num['product_name'] = cel_num
elif str(cel).strip() == word['product_description']:
num['product_description'] = cel_num
elif str(cel).strip() == word['party_price']:
num['party_price'] = cel_num
elif str(cel).strip() == word['party_quantity']:
num['party_quantity'] = cel_num
elif str(cel).strip() == word['product_warranty']:
num['product_warranty'] = cel_num
elif str(cel).strip() == word['product_url']:
num['product_url'] = cel_num
# Проверяем, все ли столбцы распознались
if len(num) > len(word):
print("Структура данных без изменений.")
else:
raise(ValueError("Ошибка структуры данных: не все столбцы опознаны."))
# Товар
elif row[num['product_article']] and row[num['product_vendor']]:
product_ = {}
party_ = {}
# Категория
category = "{} | {}".format(row[num['category']], row[num['category_sub']])
# Производитель
product_['vendor'] = s.fix_name(row[num['product_vendor']])
product_['vendor'] = Vendor.objects.get_by_key(updater = s.updater, key = product_['vendor'])
# Продукт
product_['article'] = s.fix_article(row[num['product_vendor']])
product_['article'] = s.fix_article(row[num['product_article']])
product_['name'] = s.fix_name(row[num['product_name']])
product_['description'] = s.fix_name(row[num['product_description']])
product_['warranty'] = s.fix_name(row[num['product_warranty']])
product_['url'] = s.fix_name(row[num['product_url']])
try:
product = Product.objects.take(article = product_['article'],
vendor = product_['vendor'],
name = product_['name'])
#s.products.append(product)
except ValueError as error:
continue
# Партия
party_['quantity_stock'] = s.fix_quantity(row[num['party_quantity']])
if row[num['party_quantity']] == 'в транзите':
party_['quantity_transit'] = None
else:
party_['quantity_transit'] = 0
party_['article'] = s.fix_quantity(row[num['party_article']])
party_['price'] = s.fix_price(row[num['party_price']])
try:
party = Party.objects.make(product = product,
stock = s.stock,
article = party_['article'],
price = party_['price'],
currency = s.rub,
quantity = party_['quantity_stock'],
time = s.start_time)
#self.parties.append(party)
except ValueError as error:
pass
try:
party = Party.objects.make(product = product,
stock = s.transit,
article = party_['article'],
price = party_['price'],
currency = s.rub,
quantity = party_['quantity_transit'],
time = s.start_time)
#self.parties.append(party)
except ValueError as error:
pass
In [ ]: