Форум сайта python.su
Доброго времени суток. Проблема заключается в следующем. На хостинге ограничения по процессорному времени на обработку скриптов и на нагрузку на БД. Поэтому над парсером пришлось извращаться. В атрибуте cur переменной NOW хранится кол-во спарсенных строк с файла ексель. Каждый раз скрипт пытается спарсить очередных 100 строк, затем обновляет значение в NOW и делает редирект на самого себя, пытаясь парсить далее. Кто не понял, редиректю для того, чтоб каждый вызов скрипта уложить в отведенное ограничение по процессорному времени и нагрузке на БД. В конечном итоге получаю БД с недопарсенными парою сотней строк, причем каждый раз кол-во варьируется. У кого-нибудь есть какие-либо идеи, предложения? буду рад любой помощи. Спасибо.
def parser(request):
if len(Index.objects.all())==0:
NOW = Index.objects.create(cur=1)
NOW = Index.objects.latest('id')
book = xlrd.open_workbook("avto.xls")
sheet = book.sheet_by_index(0)
if NOW.cur == 1:
from django.core.management import call_command
call_command('reset','filters', interactive=False)
cursor = connection.cursor()
cursor.execute("ALTER TABLE data_startinfo.filters_car AUTO_INCREMENT = 1")
cursor.execute("ALTER TABLE data_startinfo.filters_car_model AUTO_INCREMENT = 1")
cursor.execute("ALTER TABLE data_startinfo.filters_detail AUTO_INCREMENT = 1")
cursor.execute("ALTER TABLE data_startinfo.filters_propertie AUTO_INCREMENT = 1")
cursor.execute("ALTER TABLE data_startinfo.filters_minmax AUTO_INCREMENT = 1")
for i in range(NOW.cur,sheet.nrows):
if sheet.cell(i,1).value == "" and sheet.cell(i,2).value == "" :
car=Car(manufacturer=sheet.cell(i,0).value).save()
else:
tocar=Car.objects.latest('id')
car_model=Car_model(car=tocar,model=sheet.cell(i,0).value).save()
if sheet.cell(i,4).value !="":
tomodel=Car_model.objects.latest('id')
generator=Detail(car=tocar, model=tomodel, article=sheet.cell(i,1).value, more_info=sheet.cell(i,2).value, type=sheet.cell(0,4).value).save()
todetail=Detail.objects.latest('id')
Propertie( detail=todetail,
year=sheet.cell(i,3).value,
name=sheet.cell(i,4).value,
voltage=int(sheet.cell(i,5).value),
amperage=int(sheet.cell(i,6).value),
wholesale_price = str(str(sheet.cell(i,7).value)),
retail_price = str(sheet.cell(i,8).value),
).save()
if sheet.cell(i,10).value!="":
tomodel=Car_model.objects.latest('id')
starter=Detail(car=tocar, model=tomodel, article=sheet.cell(i,1).value, more_info=sheet.cell(i,2).value, type=sheet.cell(0,10).value).save()
todetail=Detail.objects.latest('id')
Propertie( detail=todetail,
year=sheet.cell(i,9).value,
name=sheet.cell(i,10).value,
voltage=int(sheet.cell(i,11).value),
amperage=int(sheet.cell(i,12).value),
wholesale_price = str(sheet.cell(i,13).value),
retail_price = str(sheet.cell(i,14).value),
).save()
if (i-NOW.cur)==100:
NOW.cur = int(i)
NOW.save()
return HttpResponseRedirect("/parser")
NOW.cur = 1
NOW.save()
return HttpResponseRedirect("/")
Офлайн