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:
@@ -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
327
kivi_cars/cars/crawler.py
Normal 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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -15,85 +15,84 @@ class Migration(migrations.Migration):
|
||||
name='Car',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('Olx_id', models.CharField(max_length=10)),
|
||||
('Kategorija', models.CharField(max_length=30)),
|
||||
('Cijena', models.CharField(max_length=30)),
|
||||
('Stanje', models.CharField(max_length=30)),
|
||||
('Lokacija_kanton', models.CharField(max_length=50)),
|
||||
('Lokacija_grad', models.CharField(max_length=50)),
|
||||
('Proizvođač', models.CharField(max_length=30)),
|
||||
('Model', models.CharField(max_length=30)),
|
||||
('Godište', models.CharField(max_length=30)),
|
||||
('Kilometraža', models.CharField(max_length=30)),
|
||||
('Kilovata_KW', models.CharField(max_length=30)),
|
||||
('Kubikaža', models.CharField(max_length=30)),
|
||||
('Gorivo', models.CharField(max_length=30)),
|
||||
('Broj_vrata', models.CharField(max_length=30)),
|
||||
('Konjskih_snaga', models.CharField(max_length=30)),
|
||||
('Metalik', models.CharField(max_length=30)),
|
||||
('Masa_Težina_kg', models.CharField(max_length=30)),
|
||||
('Tip', models.CharField(max_length=30)),
|
||||
('Pogon', models.CharField(max_length=30)),
|
||||
('Emisioni_standard', models.CharField(max_length=30)),
|
||||
('Veličina_felgi', models.CharField(max_length=30)),
|
||||
('Transmisija', models.CharField(max_length=30)),
|
||||
('Broj_stepeni_prijenosa', models.CharField(max_length=30)),
|
||||
('Boja', models.CharField(max_length=30)),
|
||||
('Muzika_ozvučenje', models.CharField(max_length=30)),
|
||||
('Parking_senzori', models.CharField(max_length=30)),
|
||||
('Parking_kamera', models.CharField(max_length=30)),
|
||||
('Registrovan_do', models.CharField(max_length=30)),
|
||||
('Godina_prve_registracije', models.CharField(max_length=30)),
|
||||
('Broj_prethodnih_vlasnik', models.CharField(max_length=30)),
|
||||
('Posjeduje_gume', models.CharField(max_length=30)),
|
||||
('Višezonska_klima', models.CharField(max_length=30)),
|
||||
('Rolo_zavjese', models.CharField(max_length=30)),
|
||||
('Svjetla', models.CharField(max_length=30)),
|
||||
('Zaštita_Blokada', models.CharField(max_length=30)),
|
||||
('Sjedećih_mjesta', models.CharField(max_length=30)),
|
||||
('Turbo', models.CharField(max_length=30)),
|
||||
('DPF_FAP_filter', models.CharField(max_length=30)),
|
||||
('Strane_tablice', models.CharField(max_length=30)),
|
||||
('Ocarinjen', models.CharField(max_length=30)),
|
||||
('Prilagođen_invalidima', models.CharField(max_length=30)),
|
||||
('Servo_volan', models.CharField(max_length=30)),
|
||||
('Tempomat', models.CharField(max_length=30)),
|
||||
('ESP', models.CharField(max_length=30)),
|
||||
('El_podizači_stakala', models.CharField(max_length=30)),
|
||||
('Senzor_mrtvog_ugla', models.CharField(max_length=30)),
|
||||
('Digitalna_klima', models.CharField(max_length=30)),
|
||||
('Touch_screen_ekran', models.CharField(max_length=30)),
|
||||
('Panorama_krov', models.CharField(max_length=30)),
|
||||
('Koža', models.CharField(max_length=30)),
|
||||
('Masaža_sjedišta', models.CharField(max_length=30)),
|
||||
('El_pomjeranje_sjedišta', models.CharField(max_length=30)),
|
||||
('Senzor_auto_svjetla', models.CharField(max_length=30)),
|
||||
('Alarm', models.CharField(max_length=30)),
|
||||
('Daljinsko_otključavanje', models.CharField(max_length=30)),
|
||||
('Auto_kuka', models.CharField(max_length=30)),
|
||||
('Udaren', models.CharField(max_length=30)),
|
||||
('Start_Stop_sistem', models.CharField(max_length=30)),
|
||||
('Park_assist', models.CharField(max_length=30)),
|
||||
('Registrovan', models.CharField(max_length=30)),
|
||||
('Na_lizingu', models.CharField(max_length=30)),
|
||||
('Servisna_knjiga', models.CharField(max_length=30)),
|
||||
('Komande_na_volanu', models.CharField(max_length=30)),
|
||||
('ABS', models.CharField(max_length=30)),
|
||||
('Airbag', models.CharField(max_length=30)),
|
||||
('Električni_retrovizori', models.CharField(max_length=30)),
|
||||
('Klima', models.CharField(max_length=30)),
|
||||
('Navigacija', models.CharField(max_length=30)),
|
||||
('Šiber', models.CharField(max_length=30)),
|
||||
('Naslon_za_ruku', models.CharField(max_length=30)),
|
||||
('Hlađenje_sjedišta', models.CharField(max_length=30)),
|
||||
('Grijanje_sjedišta', models.CharField(max_length=30)),
|
||||
('Memorija_sjedišta', models.CharField(max_length=30)),
|
||||
('Alu_felge', models.CharField(max_length=30)),
|
||||
('Centralna_brava', models.CharField(max_length=30)),
|
||||
('Oldtimer', models.CharField(max_length=30)),
|
||||
('ISOFIX', models.CharField(max_length=30)),
|
||||
('Datum', models.DateField()),
|
||||
('Vrijeme', models.TimeField()),
|
||||
('Olx_id', models.CharField(max_length=10, null=True)),
|
||||
('Kategorija', models.CharField(max_length=30, null=True)),
|
||||
('Cijena', models.CharField(max_length=30, null=True)),
|
||||
('Stanje', models.CharField(max_length=30, null=True)),
|
||||
('Lokacija_kanton', models.CharField(max_length=50, null=True)),
|
||||
('Lokacija_grad', models.CharField(max_length=50, null=True)),
|
||||
('Proizvođač', models.CharField(max_length=30, null=True)),
|
||||
('Model', models.CharField(max_length=30, null=True)),
|
||||
('Godište', models.CharField(max_length=30, null=True)),
|
||||
('Kilometraža', models.CharField(max_length=30, null=True)),
|
||||
('Kilovata_KW', models.CharField(max_length=30, null=True)),
|
||||
('Kubikaža', models.CharField(max_length=30, null=True)),
|
||||
('Gorivo', models.CharField(max_length=30, null=True)),
|
||||
('Broj_vrata', models.CharField(max_length=30, null=True)),
|
||||
('Konjskih_snaga', models.CharField(max_length=30, null=True)),
|
||||
('Metalik', models.CharField(max_length=30, null=True)),
|
||||
('Masa_Težina_kg', models.CharField(max_length=30, null=True)),
|
||||
('Tip', models.CharField(max_length=30, null=True)),
|
||||
('Pogon', models.CharField(max_length=30, null=True)),
|
||||
('Emisioni_standard', models.CharField(max_length=30, null=True)),
|
||||
('Veličina_felgi', models.CharField(max_length=30, null=True)),
|
||||
('Transmisija', models.CharField(max_length=30, null=True)),
|
||||
('Broj_stepeni_prijenosa', models.CharField(max_length=30, null=True)),
|
||||
('Boja', models.CharField(max_length=30, null=True)),
|
||||
('Muzika_ozvučenje', models.CharField(max_length=30, null=True)),
|
||||
('Parking_senzori', models.CharField(max_length=30, null=True)),
|
||||
('Parking_kamera', models.CharField(max_length=30, null=True)),
|
||||
('Registrovan_do', models.CharField(max_length=30, null=True)),
|
||||
('Godina_prve_registracije', models.CharField(max_length=30, null=True)),
|
||||
('Broj_prethodnih_vlasnika', models.CharField(max_length=30, null=True)),
|
||||
('Posjeduje_gume', models.CharField(max_length=30, null=True)),
|
||||
('Višezonska_klima', models.CharField(max_length=30, null=True)),
|
||||
('Rolo_zavjese', models.CharField(max_length=30, null=True)),
|
||||
('Svjetla', models.CharField(max_length=30, null=True)),
|
||||
('Zaštita_Blokada', models.CharField(max_length=30, null=True)),
|
||||
('Sjedećih_mjesta', models.CharField(max_length=30, null=True)),
|
||||
('Turbo', models.CharField(max_length=30, null=True)),
|
||||
('DPF_FAP_filter', models.CharField(max_length=30, null=True)),
|
||||
('Strane_tablice', models.CharField(max_length=30, null=True)),
|
||||
('Ocarinjen', models.CharField(max_length=30, null=True)),
|
||||
('Prilagođen_invalidima', models.CharField(max_length=30, null=True)),
|
||||
('Servo_volan', models.CharField(max_length=30, null=True)),
|
||||
('Tempomat', models.CharField(max_length=30, null=True)),
|
||||
('ESP', models.CharField(max_length=30, null=True)),
|
||||
('El_podizači_stakala', models.CharField(max_length=30, null=True)),
|
||||
('Senzor_mrtvog_ugla', models.CharField(max_length=30, null=True)),
|
||||
('Digitalna_klima', models.CharField(max_length=30, null=True)),
|
||||
('Touch_screen_ekran', models.CharField(max_length=30, null=True)),
|
||||
('Panorama_krov', models.CharField(max_length=30, null=True)),
|
||||
('Koža', models.CharField(max_length=30, null=True)),
|
||||
('Masaža_sjedišta', models.CharField(max_length=30, null=True)),
|
||||
('El_pomjeranje_sjedišta', models.CharField(max_length=30, null=True)),
|
||||
('Senzor_auto_svjetla', models.CharField(max_length=30, null=True)),
|
||||
('Alarm', models.CharField(max_length=30, null=True)),
|
||||
('Daljinsko_otključavanje', models.CharField(max_length=30, null=True)),
|
||||
('Auto_kuka', models.CharField(max_length=30, null=True)),
|
||||
('Udaren', models.CharField(max_length=30, null=True)),
|
||||
('Start_Stop_sistem', models.CharField(max_length=30, null=True)),
|
||||
('Park_assist', models.CharField(max_length=30, null=True)),
|
||||
('Registrovan', models.CharField(max_length=30, null=True)),
|
||||
('Na_lizingu', models.CharField(max_length=30, null=True)),
|
||||
('Servisna_knjiga', models.CharField(max_length=30, null=True)),
|
||||
('Komande_na_volanu', models.CharField(max_length=30, null=True)),
|
||||
('ABS', models.CharField(max_length=30, null=True)),
|
||||
('Airbag', models.CharField(max_length=30, null=True)),
|
||||
('Električni_retrovizori', models.CharField(max_length=30, null=True)),
|
||||
('Klima', models.CharField(max_length=30, null=True)),
|
||||
('Navigacija', models.CharField(max_length=30, null=True)),
|
||||
('Šiber', models.CharField(max_length=30, null=True)),
|
||||
('Naslon_za_ruku', models.CharField(max_length=30, null=True)),
|
||||
('Hlađenje_sjedišta', models.CharField(max_length=30, null=True)),
|
||||
('Grijanje_sjedišta', models.CharField(max_length=30, null=True)),
|
||||
('Memorija_sjedišta', models.CharField(max_length=30, null=True)),
|
||||
('Alu_felge', models.CharField(max_length=30, null=True)),
|
||||
('Centralna_brava', models.CharField(max_length=30, null=True)),
|
||||
('Oldtimer', models.CharField(max_length=30, null=True)),
|
||||
('ISOFIX', models.CharField(max_length=30, null=True)),
|
||||
('Datum', models.CharField(max_length=15, null=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -2,83 +2,86 @@ from django.db import models
|
||||
|
||||
|
||||
# Create your models here.
|
||||
class Car (models.Model):
|
||||
Olx_id = models.CharField(max_length=10)
|
||||
Kategorija = models.CharField(max_length=30)
|
||||
Cijena = models.CharField(max_length=30)
|
||||
Stanje = models.CharField(max_length=30)
|
||||
Lokacija_kanton = models.CharField(max_length=50)
|
||||
Lokacija_grad = models.CharField(max_length=50)
|
||||
Proizvođač = models.CharField(max_length=30)
|
||||
Model = models.CharField(max_length=30)
|
||||
Godište = models.CharField(max_length=30)
|
||||
Kilometraža = models.CharField(max_length=30)
|
||||
Kilovata_KW = models.CharField(max_length=30)
|
||||
Kubikaža = models.CharField(max_length=30)
|
||||
Gorivo = models.CharField(max_length=30)
|
||||
Broj_vrata = models.CharField(max_length=30)
|
||||
Konjskih_snaga = models.CharField(max_length=30)
|
||||
Metalik = models.CharField(max_length=30)
|
||||
Masa_Težina_kg = models.CharField(max_length=30)
|
||||
Tip = models.CharField(max_length=30)
|
||||
Pogon = models.CharField(max_length=30)
|
||||
Emisioni_standard = models.CharField(max_length=30)
|
||||
Veličina_felgi = models.CharField(max_length=30)
|
||||
Transmisija = models.CharField(max_length=30)
|
||||
Broj_stepeni_prijenosa = models.CharField(max_length=30)
|
||||
Boja = models.CharField(max_length=30)
|
||||
Muzika_ozvučenje = models.CharField(max_length=30)
|
||||
Parking_senzori= models.CharField(max_length=30)
|
||||
Parking_kamera = models.CharField(max_length=30)
|
||||
Registrovan_do = models.CharField(max_length=30)
|
||||
Godina_prve_registracije = models.CharField(max_length=30)
|
||||
Broj_prethodnih_vlasnik = models.CharField(max_length=30)
|
||||
Posjeduje_gume = models.CharField(max_length=30)
|
||||
Višezonska_klima = models.CharField(max_length=30)
|
||||
Rolo_zavjese = models.CharField(max_length=30)
|
||||
Svjetla = models.CharField(max_length=30)
|
||||
Zaštita_Blokada = models.CharField(max_length=30)
|
||||
Sjedećih_mjesta = models.CharField(max_length=30)
|
||||
Turbo = models.CharField(max_length=30)
|
||||
DPF_FAP_filter = models.CharField(max_length=30)
|
||||
Strane_tablice = models.CharField(max_length=30)
|
||||
Ocarinjen = models.CharField(max_length=30)
|
||||
Prilagođen_invalidima = models.CharField(max_length=30)
|
||||
Servo_volan = models.CharField(max_length=30)
|
||||
Tempomat = models.CharField(max_length=30)
|
||||
ESP = models.CharField(max_length=30)
|
||||
El_podizači_stakala = models.CharField(max_length=30)
|
||||
Senzor_mrtvog_ugla = models.CharField(max_length=30)
|
||||
Digitalna_klima = models.CharField(max_length=30)
|
||||
Touch_screen_ekran = models.CharField(max_length=30)
|
||||
Panorama_krov = models.CharField(max_length=30)
|
||||
Koža = models.CharField(max_length=30)
|
||||
Masaža_sjedišta = models.CharField(max_length=30)
|
||||
El_pomjeranje_sjedišta= models.CharField(max_length=30)
|
||||
Senzor_auto_svjetla = models.CharField(max_length=30)
|
||||
Alarm = models.CharField(max_length=30)
|
||||
Daljinsko_otključavanje = models.CharField(max_length=30)
|
||||
Auto_kuka = models.CharField(max_length=30)
|
||||
Udaren = models.CharField(max_length=30)
|
||||
Start_Stop_sistem = models.CharField(max_length=30)
|
||||
Park_assist = models.CharField(max_length=30)
|
||||
Registrovan = models.CharField(max_length=30)
|
||||
Na_lizingu = models.CharField(max_length=30)
|
||||
Servisna_knjiga = models.CharField(max_length=30)
|
||||
Komande_na_volanu = models.CharField(max_length=30)
|
||||
ABS = models.CharField(max_length=30)
|
||||
Airbag = models.CharField(max_length=30)
|
||||
Električni_retrovizori = models.CharField(max_length=30)
|
||||
Klima = models.CharField(max_length=30)
|
||||
Navigacija = models.CharField(max_length=30)
|
||||
Šiber= models.CharField(max_length=30)
|
||||
Naslon_za_ruku= models.CharField(max_length=30)
|
||||
Hlađenje_sjedišta = models.CharField(max_length=30)
|
||||
Grijanje_sjedišta = models.CharField(max_length=30)
|
||||
Memorija_sjedišta = models.CharField(max_length=30)
|
||||
Alu_felge = models.CharField(max_length=30)
|
||||
Centralna_brava = models.CharField(max_length=30)
|
||||
Oldtimer = models.CharField(max_length=30)
|
||||
ISOFIX = models.CharField(max_length=30)
|
||||
Datum = models.DateField()
|
||||
Vrijeme = models.TimeField()
|
||||
class Car(models.Model):
|
||||
Olx_id = models.CharField(max_length=10, null=True)
|
||||
Kategorija = models.CharField(max_length=30, null=True)
|
||||
Cijena = models.CharField(max_length=30, null=True)
|
||||
Stanje = models.CharField(max_length=30, null=True)
|
||||
Lokacija_kanton = models.CharField(max_length=50, null=True)
|
||||
Lokacija_grad = models.CharField(max_length=50, null=True)
|
||||
Proizvođač = models.CharField(max_length=30, null=True)
|
||||
Model = models.CharField(max_length=30, null=True)
|
||||
Godište = models.CharField(max_length=30, null=True)
|
||||
Kilometraža = models.CharField(max_length=30, null=True)
|
||||
Kilovata_KW = models.CharField(max_length=30, null=True)
|
||||
Kubikaža = models.CharField(max_length=30, null=True)
|
||||
Gorivo = models.CharField(max_length=30, null=True)
|
||||
Broj_vrata = models.CharField(max_length=30, null=True)
|
||||
Konjskih_snaga = models.CharField(max_length=30, null=True)
|
||||
Metalik = models.CharField(max_length=30, null=True)
|
||||
Masa_Težina_kg = models.CharField(max_length=30, null=True)
|
||||
Tip = models.CharField(max_length=30, null=True)
|
||||
Pogon = models.CharField(max_length=30, null=True)
|
||||
Emisioni_standard = models.CharField(max_length=30, null=True)
|
||||
Veličina_felgi = models.CharField(max_length=30, null=True)
|
||||
Transmisija = models.CharField(max_length=30, null=True)
|
||||
Broj_stepeni_prijenosa = models.CharField(max_length=30, null=True)
|
||||
Boja = models.CharField(max_length=30, null=True)
|
||||
Muzika_ozvučenje = models.CharField(max_length=30, null=True)
|
||||
Parking_senzori= models.CharField(max_length=30, null=True)
|
||||
Parking_kamera = models.CharField(max_length=30, null=True)
|
||||
Registrovan_do = models.CharField(max_length=30, null=True)
|
||||
Godina_prve_registracije = models.CharField(max_length=30, null=True)
|
||||
Broj_prethodnih_vlasnika = models.CharField(max_length=30, null=True)
|
||||
Posjeduje_gume = models.CharField(max_length=30, null=True)
|
||||
Višezonska_klima = models.CharField(max_length=30, null=True)
|
||||
Rolo_zavjese = models.CharField(max_length=30, null=True)
|
||||
Svjetla = models.CharField(max_length=30, null=True)
|
||||
Zaštita_Blokada = models.CharField(max_length=30, null=True)
|
||||
Sjedećih_mjesta = models.CharField(max_length=30, null=True)
|
||||
Turbo = models.CharField(max_length=30, null=True)
|
||||
DPF_FAP_filter = models.CharField(max_length=30, null=True)
|
||||
Strane_tablice = models.CharField(max_length=30, null=True)
|
||||
Ocarinjen = models.CharField(max_length=30, null=True)
|
||||
Prilagođen_invalidima = models.CharField(max_length=30, null=True)
|
||||
Servo_volan = models.CharField(max_length=30, null=True)
|
||||
Tempomat = models.CharField(max_length=30, null=True)
|
||||
ESP = models.CharField(max_length=30, null=True)
|
||||
El_podizači_stakala = models.CharField(max_length=30, null=True)
|
||||
Senzor_mrtvog_ugla = models.CharField(max_length=30, null=True)
|
||||
Digitalna_klima = models.CharField(max_length=30, null=True)
|
||||
Touch_screen_ekran = models.CharField(max_length=30, null=True)
|
||||
Panorama_krov = models.CharField(max_length=30, null=True)
|
||||
Koža = models.CharField(max_length=30, null=True)
|
||||
Masaža_sjedišta = models.CharField(max_length=30, null=True)
|
||||
El_pomjeranje_sjedišta= models.CharField(max_length=30, null=True)
|
||||
Senzor_auto_svjetla = models.CharField(max_length=30, null=True)
|
||||
Alarm = models.CharField(max_length=30, null=True)
|
||||
Daljinsko_otključavanje = models.CharField(max_length=30, null=True)
|
||||
Auto_kuka = models.CharField(max_length=30, null=True)
|
||||
Udaren = models.CharField(max_length=30, null=True)
|
||||
Start_Stop_sistem = models.CharField(max_length=30, null=True)
|
||||
Park_assist = models.CharField(max_length=30, null=True)
|
||||
Registrovan = models.CharField(max_length=30, null=True)
|
||||
Na_lizingu = models.CharField(max_length=30, null=True)
|
||||
Servisna_knjiga = models.CharField(max_length=30, null=True)
|
||||
Komande_na_volanu = models.CharField(max_length=30, null=True)
|
||||
ABS = models.CharField(max_length=30, null=True)
|
||||
Airbag = models.CharField(max_length=30, null=True)
|
||||
Električni_retrovizori = models.CharField(max_length=30, null=True)
|
||||
Klima = models.CharField(max_length=30, null=True)
|
||||
Navigacija = models.CharField(max_length=30, null=True)
|
||||
Šiber= models.CharField(max_length=30, null=True)
|
||||
Naslon_za_ruku= models.CharField(max_length=30, null=True)
|
||||
Hlađenje_sjedišta = models.CharField(max_length=30, null=True)
|
||||
Grijanje_sjedišta = models.CharField(max_length=30, null=True)
|
||||
Memorija_sjedišta = models.CharField(max_length=30, null=True)
|
||||
Alu_felge = models.CharField(max_length=30, null=True)
|
||||
Centralna_brava = models.CharField(max_length=30, null=True)
|
||||
Oldtimer = models.CharField(max_length=30, null=True)
|
||||
ISOFIX = models.CharField(max_length=30, null=True)
|
||||
Datum = models.CharField(max_length=15, null=True)
|
||||
# Vrijeme = models.CharField(max_length=20, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return (self.Olx_id)
|
||||
197
kivi_cars/cars/saver.py
Normal file
197
kivi_cars/cars/saver.py
Normal 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)
|
||||
@@ -1,3 +1,4 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ DATABASES = {
|
||||
'NAME': 'kivi_cars',
|
||||
'USER': 'postgres',
|
||||
'HOST': 'localhost',
|
||||
'PASSWORD': 'postgres'
|
||||
'PASSWORD': 'b18'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,10 @@ Including another URLconf
|
||||
from django.urls.conf import include
|
||||
from django.contrib import admin
|
||||
from django.urls import path
|
||||
from cars.saver import Saver
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
path('generator/', include("Generator.urls")),
|
||||
]
|
||||
|
||||
|
||||
BIN
proba2.xlsx
Normal file
BIN
proba2.xlsx
Normal file
Binary file not shown.
BIN
proba3.xlsx
Normal file
BIN
proba3.xlsx
Normal file
Binary file not shown.
BIN
proba4.xlsx
Normal file
BIN
proba4.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user