Merge branch 'car_crawler_saver' into 'main'

fix crawler and saver bugs

See merge request saburly/marketalarm/kivi-za-auta!11
This commit was merged in pull request #11.
This commit is contained in:
Ismail Šošić
2022-05-28 06:07:52 +00:00
11 changed files with 690 additions and 466 deletions

View File

@@ -1,305 +0,0 @@
# ----------Imports------------
from datetime import date
from traceback import print_tb
from unittest import result
from urllib import response
from urllib.request import Request
from bs4 import BeautifulSoup
from matplotlib import dates
from numpy import diag_indices
import requests
import pandas as pd
import random
# List of User-Agent
user_agent_list = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1',
'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363',
]
user_agent = user_agent_list[random.randint(0, len(user_agent_list)-1)]
headers = {'User-Agent': user_agent}
# Array of object filteri
podaci_db = []
# Pagination cross webpages
# n is number of pages to crawl
pages_number_to_crawl = 2
for i in range(1,pages_number_to_crawl):
# if kategorija=18 - Automobili
main_website = 'https://www.olx.ba/pretraga?id=18&kategorija=18&stanje=0&vrstapregleda=tabela&sort_order=desc&sort_po=datum&kilometra-a_min=0&kilometra-a_max=0&stranica=' + str(i)
category_of_vehicle = 18
# Request to website
response_for_page = requests.get(main_website, headers=headers)
# Soup object
soup_page = BeautifulSoup(response_for_page.content, 'html.parser')
# Results
results_all_items_per_page = soup_page.find_all('div',{'class':'listitem'})
# List of olx id
olx_id = []
# All filters
filters = {
"Olx_id" : None,
"Kategorija" : None,
"Cijena" : None,
"Stanje" : None,
"Lokacija_kanton" : None,
"Lokacija_grad" : None,
"Proizvođač" : None,
"Model" : None,
"Godište" : None,
"Kilometraža" : None,
"Kilovata (KW)" : None,
"Kubikaža" : None,
"Gorivo" : None,
"Broj vrata" : None,
"Konjskih snaga" : None,
"Metalik" : None,
"Masa/Težina (kg)" : None,
"Tip" : None,
"Pogon" : None,
"Emisioni standard" : None,
"Veličina felgi" : None,
"Transmisija" : None,
"Broj stepeni prijenosa" : None,
"Boja" : None,
"Muzika / ozvučenje" : None,
"Parking senzori" : None,
"Parking kamera" : None,
"Registrovan do" : None,
"Godina prve registracije" : None,
"Broj prethodnih vlasnika" : None,
"Posjeduje gume" : None,
"Višezonska klima" : None,
"Rolo zavjese" : None,
"Svjetla" : None,
"Zaštita/Blokada" : None,
"Sjedećih mjesta" : None,
"Turbo" : None,
"DPF/FAP filter" : None,
"Strane tablice" : None,
"Ocarinjen" : None,
"Prilagođen invalidima" : None,
"Servo volan" : None,
"Tempomat" : None,
"ESP" : None,
"El. podizači stakala" : None,
"Senzor mrtvog ugla" : None,
"Digitalna klima" : None,
"Touch screen (ekran)" : None,
"Panorama krov" : None,
"Koža" : None,
"Masaža sjedišta" : None,
"El. pomjeranje sjedišta" : None,
"Senzor auto. svjetla" : None,
"Alarm" : None,
"Daljinsko otključavanje" : None,
"Auto kuka" : None,
"Udaren" : None,
"Start-Stop sistem" : None,
"Park assist" : None,
"Registrovan" : None,
"Na lizingu" : None,
"Servisna knjiga" : None,
"Komande na volanu" : None,
"ABS" : None,
"Airbag" : None,
"Električni retrovizori" : None,
"Klima" : None,
"Navigacija" : None,
"Šiber" : None,
"Naslon za ruku" : None,
"Hlađenje sjedišta" : None,
"Grijanje sjedišta" : None,
"Memorija sjedišta" : None,
"Alu felge" : None,
"Centralna brava" : None,
"Oldtimer" : None,
"ISOFIX" : None,
"Datum" : None,
"Vrijeme" : None
}
# Number of all items
broj_el = 0
## Getting all id's of articles
for i in range(0, len(results_all_items_per_page)):
if(results_all_items_per_page[i].find('p')):
# Divide id from rest of link
address_content = results_all_items_per_page[i].find('a')['href']
temp = address_content.split('/')
artikal_number = temp[4]
olx_id.append(artikal_number)
broj_el = broj_el + 1
for i in range(0, broj_el):
# New dictionary instance for every item
podaci = filters.copy()
# Add kategorija
if (category_of_vehicle == 18): podaci['Kategorija'] = ('Automobili')
# Artikal olx_link
artikal_link = 'https://www.olx.ba/artikal/' + olx_id[i]
podaci["Olx_id"] = olx_id[i]
response_item = requests.get(artikal_link, headers=headers)
soup_item = BeautifulSoup(response_item.content, 'html.parser')
result_item = soup_item.find('div',{'class':'artikal_lijevo'})
# print(artikal_link)
# Getting filters info from item
# Osnovni filteri
# Cijena
if (result_item.find('div',{'id':'pc'})):
x_cijena = result_item.find('div',{'id':'pc'}).findAll('p')
item_cijena = x_cijena[1].get_text().split()[0]
if(item_cijena == 'Po'):
item_cijena = "Po dogovoru"
podaci['Cijena'] = item_cijena
# print(podaci['Cijena'])
# Lokacija
#kanton
if (result_item.find('div',{'class':'mobile-lokacija'})):
x_lokacija = result_item.find('div',{'class':'mobile-lokacija'})['data-content'].split()
item_kanton = x_lokacija[0].replace(',','')
podaci['Lokacija_kanton'] = item_kanton
# print(podaci['Lokacija_kanton'])
#grad
x_lokacija.pop(0)
item_grad = x_lokacija
mojstring = ' '.join(item_grad)
podaci['Lokacija_grad'] = mojstring
# print(podaci['Lokacija_grad'])
# Stanje
if (result_item.find('div',{'class':'mobile-stanje'})):
x_stanje = result_item.find('div',{'class':'mobile-stanje'}).get_text().split()
item_stanje = x_stanje[1]
podaci['Stanje'] = item_stanje
# print(podaci['Stanje'])
# Ispod divs
if (result_item.find_all('div',{'class':'ispod'})):
ispod_divs = result_item.find_all('div',{'class':'ispod'})
for i in range (len(ispod_divs)):
# Proizvodjac
if (i==0):
x_proizvodjac_p = ispod_divs[0].find_all('p')
x_proizvodjac = x_proizvodjac_p[1].get_text()
podaci['Proizvođač'] = x_proizvodjac
# print(podaci['Proizvođač'])
# Model
if (i==1):
x_model_p = ispod_divs[1].find_all('p')
x_model = x_model_p[1].get_text()
podaci['Model'] = x_model
# print(podaci['Model'])
# Godiste
if (i==2):
x_godiste_p = ispod_divs[2].find_all('p')
x_godiste = x_godiste_p[1].get_text()
podaci['Godište'] = x_godiste
# print(podaci['Godište'])
# Kilometraza
if (i==3):
x_kilometraza_p = ispod_divs[3].find_all('p')
x_kilometraza = x_kilometraza_p[1].get_text()
podaci['Kilometraža'] = x_kilometraza
# print(podaci['Kilometraža'])
# Gorivo
if (i==4):
x_gorivo_p = ispod_divs[4].find_all('p')
x_gorivo = x_gorivo_p[1].get_text()
podaci['Gorivo'] = x_gorivo
# print(podaci['Gorivo'])
# Napredni filteri
# Dodatna polja
if (result_item.find_all('div',{'id':'dodatnapolja1'})):
dodatnapolja_all_divs = result_item.find_all('div',{'id':'dodatnapolja1'})
for i in range (0,len(dodatnapolja_all_divs)):
df_pom = dodatnapolja_all_divs[i].find_all('div',{'class','df'})
for j in range (0,len(df_pom)):
df_pom1 = df_pom[j].find('div',{'class','df1'}).get_text()
if (df_pom[j].find('div',{'class','df2'}).find('i')):
df_pom2 = True
else : df_pom2 = df_pom[j].find('div',{'class','df2'}).get_text()
podaci[df_pom1] = df_pom2
# KW single
kw = podaci['Kilovata (KW)'].split()[0]
podaci['Kilovata (KW)'] = kw
# print(kw)
# Vrijeme i datum
if (result_item.find('div', {'class' : 'ob'})):
date_time_div = result_item.find('div', {'class' : 'ob'}).attrs
datum_vrijeme = date_time_div["data-content"].split()
datum = datum_vrijeme[0]
vrijeme = datum_vrijeme[2]
podaci["Datum"] = datum
podaci["Vrijeme"] = vrijeme
# print(podaci["Datum"], podaci["Vrijeme"])
# Insert datas to database
dictionary_copy = podaci.copy()
podaci_db.append(dictionary_copy)
# ------------- CREATE PANDAS DATAFRAME - DICTIONARY --------------
olx_db = pd.DataFrame(podaci_db) # treba biti niz
# print(olx_db)
olx_db.to_excel('proba231112.xlsx',index=False)
print("Zavrseno!!")

327
kivi_cars/cars/crawler.py Normal file
View File

@@ -0,0 +1,327 @@
# ----------Imports------------
from traceback import print_tb
from unittest import result
from urllib import response
from urllib.request import Request
from bs4 import BeautifulSoup
from matplotlib import dates
from numpy import diag_indices
import requests
import pandas as pd
import random
import datetime
# Define function crawler
def CarsCrawler(number_of_pages):
print("Crawler krola!")
# List of User-Agent
user_agent_list = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
'Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1',
'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363',
]
user_agent = user_agent_list[random.randint(0, len(user_agent_list)-1)]
headers = {'User-Agent': user_agent}
# Array of object filteri
podaci_db = []
# Pagination cross webpages
# n is number of pages to crawl
pages_number_to_crawl = number_of_pages
for i in range(1,pages_number_to_crawl):
# if kategorija=18 - Automobili
main_website = 'https://www.olx.ba/pretraga?id=18&kategorija=18&stanje=0&vrstapregleda=tabela&sort_order=desc&sort_po=datum&kilometra-a_min=0&kilometra-a_max=0&stranica=' + str(i)
category_of_vehicle = 18
# Request to website
response_for_page = requests.get(main_website, headers=headers)
# Soup object
soup_page = BeautifulSoup(response_for_page.content, 'html.parser')
# Results
results_all_items_per_page = soup_page.find_all('div',{'class':'listitem'})
# List of olx id
olx_id = []
# All filters
filters = {
"Olx_id" : None,
"Kategorija" : None,
"Cijena" : None,
"Stanje" : None,
"Lokacija_kanton" : None,
"Lokacija_grad" : None,
"Proizvođač" : None,
"Model" : None,
"Godište" : None,
"Kilometraža" : None,
"Kilovata (KW)" : None,
"Kubikaža" : None,
"Gorivo" : None,
"Broj vrata" : None,
"Konjskih snaga" : None,
"Metalik" : None,
"Masa/Težina (kg)" : None,
"Tip" : None,
"Pogon" : None,
"Emisioni standard" : None,
"Veličina felgi" : None,
"Transmisija" : None,
"Broj stepeni prijenosa" : None,
"Boja" : None,
"Muzika / ozvučenje" : None,
"Parking senzori" : None,
"Parking kamera" : None,
"Registrovan do" : None,
"Godina prve registracije" : None,
"Broj prethodnih vlasnika" : None,
"Posjeduje gume" : None,
"Višezonska klima" : None,
"Rolo zavjese" : None,
"Svjetla" : None,
"Zaštita/Blokada" : None,
"Sjedećih mjesta" : None,
"Turbo" : None,
"DPF/FAP filter" : None,
"Strane tablice" : None,
"Ocarinjen" : None,
"Prilagođen invalidima" : None,
"Servo volan" : None,
"Tempomat" : None,
"ESP" : None,
"El. podizači stakala" : None,
"Senzor mrtvog ugla" : None,
"Digitalna klima" : None,
"Touch screen (ekran)" : None,
"Panorama krov" : None,
"Koža" : None,
"Masaža sjedišta" : None,
"El. pomjeranje sjedišta" : None,
"Senzor auto. svjetla" : None,
"Alarm" : None,
"Daljinsko otključavanje" : None,
"Auto kuka" : None,
"Udaren" : None,
"Start-Stop sistem" : None,
"Park assist" : None,
"Registrovan" : None,
"Na lizingu" : None,
"Servisna knjiga" : None,
"Komande na volanu" : None,
"ABS" : None,
"Airbag" : None,
"Električni retrovizori" : None,
"Klima" : None,
"Navigacija" : None,
"Šiber" : None,
"Naslon za ruku" : None,
"Hlađenje sjedišta" : None,
"Grijanje sjedišta" : None,
"Memorija sjedišta" : None,
"Alu felge" : None,
"Centralna brava" : None,
"Oldtimer" : None,
"ISOFIX" : None,
"Datum" : None,
"Vrijeme" : None
}
# Number of all items
broj_el = 0
## Getting all id's of articles
for i in range(0, len(results_all_items_per_page)):
if(results_all_items_per_page[i].find('p')):
# Divide id from rest of link
address_content = results_all_items_per_page[i].find('a')['href']
temp = address_content.split('/')
artikal_number = temp[4]
olx_id.append(artikal_number)
broj_el = broj_el + 1
for i in range(0, broj_el):
# New dictionary instance for every item
podaci = filters.copy()
# Add kategorija
if (category_of_vehicle == 18): podaci['Kategorija'] = ('Automobili')
# Artikal olx_link
artikal_link = 'https://www.olx.ba/artikal/' + olx_id[i]
podaci["Olx_id"] = olx_id[i]
response_item = requests.get(artikal_link, headers=headers)
soup_item = BeautifulSoup(response_item.content, 'html.parser')
result_item = soup_item.find('div',{'class':'artikal_lijevo'})
# print(artikal_link)
# Getting filters info from item
# Osnovni filteri
# Cijena
if (result_item.find('div',{'id':'pc'})):
x_cijena = result_item.find('div',{'id':'pc'}).findAll('p')
item_cijena = x_cijena[1].get_text().split()[0]
if(item_cijena == 'Po'):
item_cijena = "Po dogovoru"
podaci['Cijena'] = item_cijena
# print(podaci['Cijena'])
# Lokacija
#kanton
if (result_item.find('div',{'class':'mobile-lokacija'})):
x_lokacija = result_item.find('div',{'class':'mobile-lokacija'})['data-content'].split()
item_kanton = x_lokacija[0].replace(',','')
podaci['Lokacija_kanton'] = item_kanton
# print(podaci['Lokacija_kanton'])
#grad
x_lokacija.pop(0)
item_grad = x_lokacija
mojstring = ' '.join(item_grad)
podaci['Lokacija_grad'] = mojstring
# print(podaci['Lokacija_grad'])
# Stanje
if (result_item.find('div',{'class':'mobile-stanje'})):
x_stanje = result_item.find('div',{'class':'mobile-stanje'}).get_text().split()
item_stanje = x_stanje[1]
podaci['Stanje'] = item_stanje
# print(podaci['Stanje'])
# Ispod divs
if (result_item.find_all('div',{'class':'ispod'})):
ispod_divs = result_item.find_all('div',{'class':'ispod'})
for i in range (len(ispod_divs)):
# Proizvodjac
if (i==0):
x_proizvodjac_p = ispod_divs[0].find_all('p')
x_proizvodjac = x_proizvodjac_p[1].get_text()
podaci['Proizvođač'] = x_proizvodjac
# print(podaci['Proizvođač'])
# Model
if (i==1):
x_model_p = ispod_divs[1].find_all('p')
x_model = x_model_p[1].get_text()
podaci['Model'] = x_model
# print(podaci['Model'])
# Godiste
if (i==2):
x_godiste_p = ispod_divs[2].find_all('p')
x_godiste = x_godiste_p[1].get_text()
podaci['Godište'] = x_godiste
# print(podaci['Godište'])
# Kilometraza
if (i==3):
x_kilometraza_p = ispod_divs[3].find_all('p')
x_kilometraza = x_kilometraza_p[1].get_text()
podaci['Kilometraža'] = x_kilometraza
# print(podaci['Kilometraža'])
# Gorivo
if (i==4):
x_gorivo_p = ispod_divs[4].find_all('p')
x_gorivo = x_gorivo_p[1].get_text()
podaci['Gorivo'] = x_gorivo
# print(podaci['Gorivo'])
# Napredni filteri
# Dodatna polja
if (result_item.find_all('div',{'id':'dodatnapolja1'})):
dodatnapolja_all_divs = result_item.find_all('div',{'id':'dodatnapolja1'})
for i in range (0,len(dodatnapolja_all_divs)):
if(dodatnapolja_all_divs[i].find_all('div',{'class','df'})):
df_pom = dodatnapolja_all_divs[i].find_all('div',{'class','df'})
for j in range (0,len(df_pom)):
df_pom1 = df_pom[j].find('div',{'class','df1'}).get_text()
if (df_pom[j].find('div',{'class','df2'}).find('i')):
df_pom2 = True
else : df_pom2 = df_pom[j].find('div',{'class','df2'}).get_text()
podaci[df_pom1] = df_pom2
# KW single
if podaci['Kilovata (KW)']:
kw = podaci['Kilovata (KW)'].split()[0]
podaci['Kilovata (KW)'] = kw
# print(kw)
# Datum objave
if (result_item.find('time', {'class' : 'entry-date'})):
date_objave_div = result_item.find('time', {'class' : 'entry-date'}).get_text().split()
datum_objave = date_objave_div[0]
datum_objave = datum_objave.split('.')
datum_objave = datum_objave[2] + "-" + datum_objave[1] + "-" + datum_objave[0]
# print(datum_objave)
# Datum obnove
if (result_item.find('div', {'class' : 'ob'})):
datum_obnove_div = result_item.find('div', {'class' : 'ob'}).attrs
datum_vrijeme = datum_obnove_div["data-content"].split('.')
datum = datum_vrijeme[2] + "-" + datum_vrijeme[1] + "-" + datum_vrijeme[0]
if datum == 'None':
podaci["Datum"] = datum_objave
else:
# print(datum)
podaci["Datum"] = datum
# podaci["Vrijeme"] = vrijeme
# Insert datas to database
dictionary_copy = podaci.copy()
podaci_db.append(dictionary_copy)
print("Zavrseno!")
return podaci_db
# ------------- CREATE PANDAS DATAFRAME - DICTIONARY --------------
# olx_db = pd.DataFrame(podaci_db) # treba biti niz
# # print(olx_db)
# olx_db.to_excel('proba231112.xlsx',index=False)

View File

@@ -1,4 +1,4 @@
# Generated by Django 4.0.4 on 2022-05-16 04:55 # Generated by Django 4.0.4 on 2022-05-28 05:43
from django.db import migrations, models from django.db import migrations, models
@@ -15,85 +15,84 @@ class Migration(migrations.Migration):
name='Car', name='Car',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('Olx_id', models.CharField(max_length=10)), ('Olx_id', models.CharField(max_length=10, null=True)),
('Kategorija', models.CharField(max_length=30)), ('Kategorija', models.CharField(max_length=30, null=True)),
('Cijena', models.CharField(max_length=30)), ('Cijena', models.CharField(max_length=30, null=True)),
('Stanje', models.CharField(max_length=30)), ('Stanje', models.CharField(max_length=30, null=True)),
('Lokacija_kanton', models.CharField(max_length=50)), ('Lokacija_kanton', models.CharField(max_length=50, null=True)),
('Lokacija_grad', models.CharField(max_length=50)), ('Lokacija_grad', models.CharField(max_length=50, null=True)),
('Proizvođač', models.CharField(max_length=30)), ('Proizvođač', models.CharField(max_length=30, null=True)),
('Model', models.CharField(max_length=30)), ('Model', models.CharField(max_length=30, null=True)),
('Godište', models.CharField(max_length=30)), ('Godište', models.CharField(max_length=30, null=True)),
('Kilometraža', models.CharField(max_length=30)), ('Kilometraža', models.CharField(max_length=30, null=True)),
('Kilovata_KW', models.CharField(max_length=30)), ('Kilovata_KW', models.CharField(max_length=30, null=True)),
('Kubikaža', models.CharField(max_length=30)), ('Kubikaža', models.CharField(max_length=30, null=True)),
('Gorivo', models.CharField(max_length=30)), ('Gorivo', models.CharField(max_length=30, null=True)),
('Broj_vrata', models.CharField(max_length=30)), ('Broj_vrata', models.CharField(max_length=30, null=True)),
('Konjskih_snaga', models.CharField(max_length=30)), ('Konjskih_snaga', models.CharField(max_length=30, null=True)),
('Metalik', models.CharField(max_length=30)), ('Metalik', models.CharField(max_length=30, null=True)),
('Masa_Težina_kg', models.CharField(max_length=30)), ('Masa_Težina_kg', models.CharField(max_length=30, null=True)),
('Tip', models.CharField(max_length=30)), ('Tip', models.CharField(max_length=30, null=True)),
('Pogon', models.CharField(max_length=30)), ('Pogon', models.CharField(max_length=30, null=True)),
('Emisioni_standard', models.CharField(max_length=30)), ('Emisioni_standard', models.CharField(max_length=30, null=True)),
('Veličina_felgi', models.CharField(max_length=30)), ('Veličina_felgi', models.CharField(max_length=30, null=True)),
('Transmisija', models.CharField(max_length=30)), ('Transmisija', models.CharField(max_length=30, null=True)),
('Broj_stepeni_prijenosa', models.CharField(max_length=30)), ('Broj_stepeni_prijenosa', models.CharField(max_length=30, null=True)),
('Boja', models.CharField(max_length=30)), ('Boja', models.CharField(max_length=30, null=True)),
('Muzika_ozvučenje', models.CharField(max_length=30)), ('Muzika_ozvučenje', models.CharField(max_length=30, null=True)),
('Parking_senzori', models.CharField(max_length=30)), ('Parking_senzori', models.CharField(max_length=30, null=True)),
('Parking_kamera', models.CharField(max_length=30)), ('Parking_kamera', models.CharField(max_length=30, null=True)),
('Registrovan_do', models.CharField(max_length=30)), ('Registrovan_do', models.CharField(max_length=30, null=True)),
('Godina_prve_registracije', models.CharField(max_length=30)), ('Godina_prve_registracije', models.CharField(max_length=30, null=True)),
('Broj_prethodnih_vlasnik', models.CharField(max_length=30)), ('Broj_prethodnih_vlasnika', models.CharField(max_length=30, null=True)),
('Posjeduje_gume', models.CharField(max_length=30)), ('Posjeduje_gume', models.CharField(max_length=30, null=True)),
('Višezonska_klima', models.CharField(max_length=30)), ('Višezonska_klima', models.CharField(max_length=30, null=True)),
('Rolo_zavjese', models.CharField(max_length=30)), ('Rolo_zavjese', models.CharField(max_length=30, null=True)),
('Svjetla', models.CharField(max_length=30)), ('Svjetla', models.CharField(max_length=30, null=True)),
('Zaštita_Blokada', models.CharField(max_length=30)), ('Zaštita_Blokada', models.CharField(max_length=30, null=True)),
('Sjedećih_mjesta', models.CharField(max_length=30)), ('Sjedećih_mjesta', models.CharField(max_length=30, null=True)),
('Turbo', models.CharField(max_length=30)), ('Turbo', models.CharField(max_length=30, null=True)),
('DPF_FAP_filter', models.CharField(max_length=30)), ('DPF_FAP_filter', models.CharField(max_length=30, null=True)),
('Strane_tablice', models.CharField(max_length=30)), ('Strane_tablice', models.CharField(max_length=30, null=True)),
('Ocarinjen', models.CharField(max_length=30)), ('Ocarinjen', models.CharField(max_length=30, null=True)),
('Prilagođen_invalidima', models.CharField(max_length=30)), ('Prilagođen_invalidima', models.CharField(max_length=30, null=True)),
('Servo_volan', models.CharField(max_length=30)), ('Servo_volan', models.CharField(max_length=30, null=True)),
('Tempomat', models.CharField(max_length=30)), ('Tempomat', models.CharField(max_length=30, null=True)),
('ESP', models.CharField(max_length=30)), ('ESP', models.CharField(max_length=30, null=True)),
('El_podizači_stakala', models.CharField(max_length=30)), ('El_podizači_stakala', models.CharField(max_length=30, null=True)),
('Senzor_mrtvog_ugla', models.CharField(max_length=30)), ('Senzor_mrtvog_ugla', models.CharField(max_length=30, null=True)),
('Digitalna_klima', models.CharField(max_length=30)), ('Digitalna_klima', models.CharField(max_length=30, null=True)),
('Touch_screen_ekran', models.CharField(max_length=30)), ('Touch_screen_ekran', models.CharField(max_length=30, null=True)),
('Panorama_krov', models.CharField(max_length=30)), ('Panorama_krov', models.CharField(max_length=30, null=True)),
('Koža', models.CharField(max_length=30)), ('Koža', models.CharField(max_length=30, null=True)),
('Masaža_sjedišta', models.CharField(max_length=30)), ('Masaža_sjedišta', models.CharField(max_length=30, null=True)),
('El_pomjeranje_sjedišta', models.CharField(max_length=30)), ('El_pomjeranje_sjedišta', models.CharField(max_length=30, null=True)),
('Senzor_auto_svjetla', models.CharField(max_length=30)), ('Senzor_auto_svjetla', models.CharField(max_length=30, null=True)),
('Alarm', models.CharField(max_length=30)), ('Alarm', models.CharField(max_length=30, null=True)),
('Daljinsko_otključavanje', models.CharField(max_length=30)), ('Daljinsko_otključavanje', models.CharField(max_length=30, null=True)),
('Auto_kuka', models.CharField(max_length=30)), ('Auto_kuka', models.CharField(max_length=30, null=True)),
('Udaren', models.CharField(max_length=30)), ('Udaren', models.CharField(max_length=30, null=True)),
('Start_Stop_sistem', models.CharField(max_length=30)), ('Start_Stop_sistem', models.CharField(max_length=30, null=True)),
('Park_assist', models.CharField(max_length=30)), ('Park_assist', models.CharField(max_length=30, null=True)),
('Registrovan', models.CharField(max_length=30)), ('Registrovan', models.CharField(max_length=30, null=True)),
('Na_lizingu', models.CharField(max_length=30)), ('Na_lizingu', models.CharField(max_length=30, null=True)),
('Servisna_knjiga', models.CharField(max_length=30)), ('Servisna_knjiga', models.CharField(max_length=30, null=True)),
('Komande_na_volanu', models.CharField(max_length=30)), ('Komande_na_volanu', models.CharField(max_length=30, null=True)),
('ABS', models.CharField(max_length=30)), ('ABS', models.CharField(max_length=30, null=True)),
('Airbag', models.CharField(max_length=30)), ('Airbag', models.CharField(max_length=30, null=True)),
('Električni_retrovizori', models.CharField(max_length=30)), ('Električni_retrovizori', models.CharField(max_length=30, null=True)),
('Klima', models.CharField(max_length=30)), ('Klima', models.CharField(max_length=30, null=True)),
('Navigacija', models.CharField(max_length=30)), ('Navigacija', models.CharField(max_length=30, null=True)),
('Šiber', models.CharField(max_length=30)), ('Šiber', models.CharField(max_length=30, null=True)),
('Naslon_za_ruku', models.CharField(max_length=30)), ('Naslon_za_ruku', models.CharField(max_length=30, null=True)),
('Hlađenje_sjedišta', models.CharField(max_length=30)), ('Hlađenje_sjedišta', models.CharField(max_length=30, null=True)),
('Grijanje_sjedišta', models.CharField(max_length=30)), ('Grijanje_sjedišta', models.CharField(max_length=30, null=True)),
('Memorija_sjedišta', models.CharField(max_length=30)), ('Memorija_sjedišta', models.CharField(max_length=30, null=True)),
('Alu_felge', models.CharField(max_length=30)), ('Alu_felge', models.CharField(max_length=30, null=True)),
('Centralna_brava', models.CharField(max_length=30)), ('Centralna_brava', models.CharField(max_length=30, null=True)),
('Oldtimer', models.CharField(max_length=30)), ('Oldtimer', models.CharField(max_length=30, null=True)),
('ISOFIX', models.CharField(max_length=30)), ('ISOFIX', models.CharField(max_length=30, null=True)),
('Datum', models.DateField()), ('Datum', models.CharField(max_length=15, null=True)),
('Vrijeme', models.TimeField()),
], ],
), ),
] ]

View File

@@ -2,83 +2,86 @@ from django.db import models
# Create your models here. # Create your models here.
class Car (models.Model): class Car(models.Model):
Olx_id = models.CharField(max_length=10) Olx_id = models.CharField(max_length=10, null=True)
Kategorija = models.CharField(max_length=30) Kategorija = models.CharField(max_length=30, null=True)
Cijena = models.CharField(max_length=30) Cijena = models.CharField(max_length=30, null=True)
Stanje = models.CharField(max_length=30) Stanje = models.CharField(max_length=30, null=True)
Lokacija_kanton = models.CharField(max_length=50) Lokacija_kanton = models.CharField(max_length=50, null=True)
Lokacija_grad = models.CharField(max_length=50) Lokacija_grad = models.CharField(max_length=50, null=True)
Proizvođač = models.CharField(max_length=30) Proizvođač = models.CharField(max_length=30, null=True)
Model = models.CharField(max_length=30) Model = models.CharField(max_length=30, null=True)
Godište = models.CharField(max_length=30) Godište = models.CharField(max_length=30, null=True)
Kilometraža = models.CharField(max_length=30) Kilometraža = models.CharField(max_length=30, null=True)
Kilovata_KW = models.CharField(max_length=30) Kilovata_KW = models.CharField(max_length=30, null=True)
Kubikaža = models.CharField(max_length=30) Kubikaža = models.CharField(max_length=30, null=True)
Gorivo = models.CharField(max_length=30) Gorivo = models.CharField(max_length=30, null=True)
Broj_vrata = models.CharField(max_length=30) Broj_vrata = models.CharField(max_length=30, null=True)
Konjskih_snaga = models.CharField(max_length=30) Konjskih_snaga = models.CharField(max_length=30, null=True)
Metalik = models.CharField(max_length=30) Metalik = models.CharField(max_length=30, null=True)
Masa_Težina_kg = models.CharField(max_length=30) Masa_Težina_kg = models.CharField(max_length=30, null=True)
Tip = models.CharField(max_length=30) Tip = models.CharField(max_length=30, null=True)
Pogon = models.CharField(max_length=30) Pogon = models.CharField(max_length=30, null=True)
Emisioni_standard = models.CharField(max_length=30) Emisioni_standard = models.CharField(max_length=30, null=True)
Veličina_felgi = models.CharField(max_length=30) Veličina_felgi = models.CharField(max_length=30, null=True)
Transmisija = models.CharField(max_length=30) Transmisija = models.CharField(max_length=30, null=True)
Broj_stepeni_prijenosa = models.CharField(max_length=30) Broj_stepeni_prijenosa = models.CharField(max_length=30, null=True)
Boja = models.CharField(max_length=30) Boja = models.CharField(max_length=30, null=True)
Muzika_ozvučenje = models.CharField(max_length=30) Muzika_ozvučenje = models.CharField(max_length=30, null=True)
Parking_senzori= models.CharField(max_length=30) Parking_senzori= models.CharField(max_length=30, null=True)
Parking_kamera = models.CharField(max_length=30) Parking_kamera = models.CharField(max_length=30, null=True)
Registrovan_do = models.CharField(max_length=30) Registrovan_do = models.CharField(max_length=30, null=True)
Godina_prve_registracije = models.CharField(max_length=30) Godina_prve_registracije = models.CharField(max_length=30, null=True)
Broj_prethodnih_vlasnik = models.CharField(max_length=30) Broj_prethodnih_vlasnika = models.CharField(max_length=30, null=True)
Posjeduje_gume = models.CharField(max_length=30) Posjeduje_gume = models.CharField(max_length=30, null=True)
Višezonska_klima = models.CharField(max_length=30) Višezonska_klima = models.CharField(max_length=30, null=True)
Rolo_zavjese = models.CharField(max_length=30) Rolo_zavjese = models.CharField(max_length=30, null=True)
Svjetla = models.CharField(max_length=30) Svjetla = models.CharField(max_length=30, null=True)
Zaštita_Blokada = models.CharField(max_length=30) Zaštita_Blokada = models.CharField(max_length=30, null=True)
Sjedećih_mjesta = models.CharField(max_length=30) Sjedećih_mjesta = models.CharField(max_length=30, null=True)
Turbo = models.CharField(max_length=30) Turbo = models.CharField(max_length=30, null=True)
DPF_FAP_filter = models.CharField(max_length=30) DPF_FAP_filter = models.CharField(max_length=30, null=True)
Strane_tablice = models.CharField(max_length=30) Strane_tablice = models.CharField(max_length=30, null=True)
Ocarinjen = models.CharField(max_length=30) Ocarinjen = models.CharField(max_length=30, null=True)
Prilagođen_invalidima = models.CharField(max_length=30) Prilagođen_invalidima = models.CharField(max_length=30, null=True)
Servo_volan = models.CharField(max_length=30) Servo_volan = models.CharField(max_length=30, null=True)
Tempomat = models.CharField(max_length=30) Tempomat = models.CharField(max_length=30, null=True)
ESP = models.CharField(max_length=30) ESP = models.CharField(max_length=30, null=True)
El_podizači_stakala = models.CharField(max_length=30) El_podizači_stakala = models.CharField(max_length=30, null=True)
Senzor_mrtvog_ugla = models.CharField(max_length=30) Senzor_mrtvog_ugla = models.CharField(max_length=30, null=True)
Digitalna_klima = models.CharField(max_length=30) Digitalna_klima = models.CharField(max_length=30, null=True)
Touch_screen_ekran = models.CharField(max_length=30) Touch_screen_ekran = models.CharField(max_length=30, null=True)
Panorama_krov = models.CharField(max_length=30) Panorama_krov = models.CharField(max_length=30, null=True)
Koža = models.CharField(max_length=30) Koža = models.CharField(max_length=30, null=True)
Masaža_sjedišta = models.CharField(max_length=30) Masaža_sjedišta = models.CharField(max_length=30, null=True)
El_pomjeranje_sjedišta= models.CharField(max_length=30) El_pomjeranje_sjedišta= models.CharField(max_length=30, null=True)
Senzor_auto_svjetla = models.CharField(max_length=30) Senzor_auto_svjetla = models.CharField(max_length=30, null=True)
Alarm = models.CharField(max_length=30) Alarm = models.CharField(max_length=30, null=True)
Daljinsko_otključavanje = models.CharField(max_length=30) Daljinsko_otključavanje = models.CharField(max_length=30, null=True)
Auto_kuka = models.CharField(max_length=30) Auto_kuka = models.CharField(max_length=30, null=True)
Udaren = models.CharField(max_length=30) Udaren = models.CharField(max_length=30, null=True)
Start_Stop_sistem = models.CharField(max_length=30) Start_Stop_sistem = models.CharField(max_length=30, null=True)
Park_assist = models.CharField(max_length=30) Park_assist = models.CharField(max_length=30, null=True)
Registrovan = models.CharField(max_length=30) Registrovan = models.CharField(max_length=30, null=True)
Na_lizingu = models.CharField(max_length=30) Na_lizingu = models.CharField(max_length=30, null=True)
Servisna_knjiga = models.CharField(max_length=30) Servisna_knjiga = models.CharField(max_length=30, null=True)
Komande_na_volanu = models.CharField(max_length=30) Komande_na_volanu = models.CharField(max_length=30, null=True)
ABS = models.CharField(max_length=30) ABS = models.CharField(max_length=30, null=True)
Airbag = models.CharField(max_length=30) Airbag = models.CharField(max_length=30, null=True)
Električni_retrovizori = models.CharField(max_length=30) Električni_retrovizori = models.CharField(max_length=30, null=True)
Klima = models.CharField(max_length=30) Klima = models.CharField(max_length=30, null=True)
Navigacija = models.CharField(max_length=30) Navigacija = models.CharField(max_length=30, null=True)
Šiber= models.CharField(max_length=30) Šiber= models.CharField(max_length=30, null=True)
Naslon_za_ruku= models.CharField(max_length=30) Naslon_za_ruku= models.CharField(max_length=30, null=True)
Hlađenje_sjedišta = models.CharField(max_length=30) Hlađenje_sjedišta = models.CharField(max_length=30, null=True)
Grijanje_sjedišta = models.CharField(max_length=30) Grijanje_sjedišta = models.CharField(max_length=30, null=True)
Memorija_sjedišta = models.CharField(max_length=30) Memorija_sjedišta = models.CharField(max_length=30, null=True)
Alu_felge = models.CharField(max_length=30) Alu_felge = models.CharField(max_length=30, null=True)
Centralna_brava = models.CharField(max_length=30) Centralna_brava = models.CharField(max_length=30, null=True)
Oldtimer = models.CharField(max_length=30) Oldtimer = models.CharField(max_length=30, null=True)
ISOFIX = models.CharField(max_length=30) ISOFIX = models.CharField(max_length=30, null=True)
Datum = models.DateField() Datum = models.CharField(max_length=15, null=True)
Vrijeme = models.TimeField() # Vrijeme = models.CharField(max_length=20, blank=True)
def __str__(self):
return (self.Olx_id)

197
kivi_cars/cars/saver.py Normal file
View File

@@ -0,0 +1,197 @@
import time
from cars.crawler import CarsCrawler
from cars.models import Car
#if num_of_crawl is 0 --> first start --> crawl all pages
#if num_of_crawl is 1 --> second and others --> crawl just 2 pages
num_of_crawl = 0
while True:
def Saver():
print("_________________________________")
global num_of_crawl
if num_of_crawl == 0:
cars = CarsCrawler(5)
num_of_crawl += 1
else:
cars = CarsCrawler(2)
# print(len(cars))
for car in cars:
print(car["Datum"], car["Olx_id"])
if Car.objects.all().filter(Olx_id = car["Olx_id"], Datum = car["Datum"]).exists():
print("Artikal postoji")
continue
try:
auto = Car.objects.get(Olx_id = car["Olx_id"])
auto.Kategorija = car["Kategorija"]
auto.Cijena = car["Cijena"]
auto.Stanje = car["Stanje"]
auto.Lokacija_kanton = car["Lokacija_kanton"]
auto.Lokacija_grad = car["Lokacija_grad"]
auto.Proizvođač = car["Proizvođač"]
auto.Model = car["Model"]
auto.Godište = car["Godište"]
auto.Kilometraža = car["Kilometraža"]
auto.Kilovata_KW = car["Kilovata (KW)"]
auto.Kubikaža = car["Kubikaža"]
auto.Gorivo = car["Gorivo"]
auto.Broj_vrata = car["Broj vrata"]
auto.Konjskih_snaga = car["Konjskih snaga"]
auto.Metalik = car["Metalik"]
auto.Masa_Težina_kg = car["Masa/Težina (kg)"]
auto.Tip = car["Tip"]
auto.Pogon = car["Pogon"]
auto.Emisioni_standard = car["Emisioni standard"]
auto.Veličina_felgi = car["Veličina felgi"]
auto.Transmisija = car["Transmisija"]
auto.Broj_stepeni_prijenosa = car["Broj stepeni prijenosa"]
auto.Boja = car["Boja"]
auto.Muzika_ozvučenje = car["Muzika / ozvučenje"]
auto.Parking_senzori = car["Parking senzori"]
auto.Parking_kamera = car["Parking kamera"]
auto.Registrovan_do = car["Registrovan do"]
auto.Godina_prve_registracije = car["Godina prve registracije"]
auto.Broj_prethodnih_vlasnika = car["Broj prethodnih vlasnika"]
auto.Posjeduje_gume = car["Posjeduje gume"]
auto.Višezonska_klima = car["Višezonska klima"]
auto.Rolo_zavjese = car["Rolo zavjese"]
auto.Svjetla = car["Svjetla"]
auto.Zaštita_Blokada = car["Zaštita/Blokada"]
auto.Sjedećih_mjesta = car["Sjedećih mjesta"]
auto.Turbo = car["Turbo"]
auto.DPF_FAP_filter = car["DPF/FAP filter"]
auto.Strane_tablice = car["Strane tablice"]
auto.Ocarinjen = car["Ocarinjen"]
auto.Prilagođen_invalidima = car["Prilagođen invalidima"]
auto.Servo_volan = car["Servo volan"]
auto.Tempomat = car["Tempomat"]
auto.ESP = car["ESP"]
auto.El_podizači_stakala = car["El. podizači stakala"]
auto.Senzor_mrtvog_ugla = car["Senzor mrtvog ugla"]
auto.Digitalna_klima = car["Digitalna klima"]
auto.Touch_screen_ekran = car["Touch screen (ekran)"]
auto.Panorama_krov = car["Panorama krov"]
auto.Koža = car["Koža"]
auto.Masaža_sjedišta = car["Masaža sjedišta"]
auto.El_pomjeranje_sjedišta= car["El. pomjeranje sjedišta"]
auto.Senzor_auto_svjetla = car["Senzor auto. svjetla"]
auto.Alarm = car["Alarm"]
auto.Daljinsko_otključavanje = car["Daljinsko otključavanje"]
auto.Auto_kuka = car["Auto kuka"]
auto.Udaren = car["Udaren"]
auto.Start_Stop_sistem = car["Start-Stop sistem"]
auto.Park_assist = car["Park assist"]
auto.Registrovan = car["Registrovan"]
auto.Na_lizingu = car["Na lizingu"]
auto.Servisna_knjiga = car["Servisna knjiga"]
auto.Komande_na_volanu = car["Komande na volanu"]
auto.ABS = car["ABS"]
auto.Airbag = car["Airbag"]
auto.Električni_retrovizori = car["Električni retrovizori"]
auto.Klima = car["Klima"]
auto.Navigacija = car["Navigacija"]
auto.Šiber = car["Šiber"]
auto.Naslon_za_ruku= car["Naslon za ruku"]
auto.Hlađenje_sjedišta = car["Hlađenje sjedišta"]
auto.Grijanje_sjedišta = car["Grijanje sjedišta"]
auto.Memorija_sjedišta = car["Memorija sjedišta"]
auto.Alu_felge = car["Alu felge"]
auto.Centralna_brava = car["Centralna brava"]
auto.Oldtimer = car["Oldtimer"]
auto.ISOFIX = car["ISOFIX"]
auto.Datum = car["Datum"]
auto.save()
print("Artikal obnovljen")
except Car.DoesNotExist:
auto = Car.objects.create(
Olx_id = car["Olx_id"],
Kategorija = car["Kategorija"],
Cijena = car["Cijena"],
Stanje = car["Stanje"],
Lokacija_kanton = car["Lokacija_kanton"],
Lokacija_grad = car["Lokacija_grad"],
Proizvođač = car["Proizvođač"],
Model = car["Model"],
Godište = car["Godište"],
Kilometraža = car["Kilometraža"],
Kilovata_KW = car["Kilovata (KW)"],
Kubikaža = car["Kubikaža"],
Gorivo = car["Gorivo"],
Broj_vrata = car["Broj vrata"],
Konjskih_snaga = car["Konjskih snaga"],
Metalik = car["Metalik"],
Masa_Težina_kg = car["Masa/Težina (kg)"],
Tip = car["Tip"],
Pogon = car["Pogon"],
Emisioni_standard = car["Emisioni standard"],
Veličina_felgi = car["Veličina felgi"],
Transmisija = car["Transmisija"],
Broj_stepeni_prijenosa = car["Broj stepeni prijenosa"],
Boja = car["Boja"],
Muzika_ozvučenje = car["Muzika / ozvučenje"],
Parking_senzori = car["Parking senzori"],
Parking_kamera = car["Parking kamera"],
Registrovan_do = car["Registrovan do"],
Godina_prve_registracije = car["Godina prve registracije"],
Broj_prethodnih_vlasnika = car["Broj prethodnih vlasnika"],
Posjeduje_gume = car["Posjeduje gume"],
Višezonska_klima = car["Višezonska klima"],
Rolo_zavjese = car["Rolo zavjese"],
Svjetla = car["Svjetla"],
Zaštita_Blokada = car["Zaštita/Blokada"],
Sjedećih_mjesta = car["Sjedećih mjesta"],
Turbo = car["Turbo"],
DPF_FAP_filter = car["DPF/FAP filter"],
Strane_tablice = car["Strane tablice"],
Ocarinjen = car["Ocarinjen"],
Prilagođen_invalidima = car["Prilagođen invalidima"],
Servo_volan = car["Servo volan"],
Tempomat = car["Tempomat"],
ESP = car["ESP"],
El_podizači_stakala = car["El. podizači stakala"],
Senzor_mrtvog_ugla = car["Senzor mrtvog ugla"],
Digitalna_klima = car["Digitalna klima"],
Touch_screen_ekran = car["Touch screen (ekran)"],
Panorama_krov = car["Panorama krov"],
Koža = car["Koža"],
Masaža_sjedišta = car["Masaža sjedišta"],
El_pomjeranje_sjedišta= car["El. pomjeranje sjedišta"],
Senzor_auto_svjetla = car["Senzor auto. svjetla"],
Alarm = car["Alarm"],
Daljinsko_otključavanje = car["Daljinsko otključavanje"],
Auto_kuka = car["Auto kuka"],
Udaren = car["Udaren"],
Start_Stop_sistem = car["Start-Stop sistem"],
Park_assist = car["Park assist"],
Registrovan = car["Registrovan"],
Na_lizingu = car["Na lizingu"],
Servisna_knjiga = car["Servisna knjiga"],
Komande_na_volanu = car["Komande na volanu"],
ABS = car["ABS"],
Airbag = car["Airbag"],
Električni_retrovizori = car["Električni retrovizori"],
Klima = car["Klima"],
Navigacija = car["Navigacija"],
Šiber = car["Šiber"],
Naslon_za_ruku= car["Naslon za ruku"],
Hlađenje_sjedišta = car["Hlađenje sjedišta"],
Grijanje_sjedišta = car["Grijanje sjedišta"],
Memorija_sjedišta = car["Memorija sjedišta"],
Alu_felge = car["Alu felge"],
Centralna_brava = car["Centralna brava"],
Oldtimer = car["Oldtimer"],
ISOFIX = car["ISOFIX"],
Datum = car["Datum"],
# Vrijeme = car["Vrijeme"]
)
auto.save()
print("Novi artikal je spasen")
print("___________________________")
Saver()
time.sleep(120)

View File

@@ -1,3 +1,4 @@
from django.shortcuts import render from django.shortcuts import render
# Create your views here. # Create your views here.

View File

@@ -84,7 +84,7 @@ DATABASES = {
'NAME': 'kivi_cars', 'NAME': 'kivi_cars',
'USER': 'postgres', 'USER': 'postgres',
'HOST': 'localhost', 'HOST': 'localhost',
'PASSWORD': 'postgres' 'PASSWORD': 'b18'
} }
} }

View File

@@ -16,8 +16,10 @@ Including another URLconf
from django.urls.conf import include from django.urls.conf import include
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from cars.saver import Saver
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('generator/', include("Generator.urls")), path('generator/', include("Generator.urls")),
] ]

BIN
proba2.xlsx Normal file

Binary file not shown.

BIN
proba3.xlsx Normal file

Binary file not shown.

BIN
proba4.xlsx Normal file

Binary file not shown.