Ponowna próba dodania dwóch plików

This commit is contained in:
Bartek 2022-12-14 04:50:05 +01:00
parent 39c84f9e0d
commit a8c9ac37b1
2 changed files with 145 additions and 0 deletions

View File

@ -0,0 +1,43 @@
from rembg import remove
import os
from PIL import Image
import io
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# wskazanie folderów odczytu i zapisu zdjęć
src_folder = 'E:\\AUTOwycena\\AUTOpictures\\'
dst_folder = 'E:\\AUTOwycena\\AUTOsilhouettes\\'
# znalezienie plików do modyfikacji
files = os.listdir(src_folder)
for file in files:
# ustalenie nazw oraz rozszerzeń plików
file_name, file_extension = os.path.splitext(file)
# ustalenie nazwy pliku do modyfikacji
file_name_before = src_folder + file
with open(file_name_before, 'rb') as i:
# ustalenie nazwy pliku po modyfikacji
file_name_after = dst_folder + file_name + '_silhouette' + file_extension
with open(file_name_after , 'wb') as o:
# wczytanie zdjęcia do modyfikacji
car_picture = i.read()
# usunięcie tła
car_silhouette = remove(car_picture)
# zpisanie zdjęcia po modyfikacji
o.write(car_silhouette)
# odczyt plików
car_pictures = os.listdir(src_folder)
car_silhouettes = os.listdir(dst_folder)
for i in range(len(car_pictures)):
# odczyt zdjęć
img_A = mpimg.imread(src_folder + car_pictures[i])
img_B = mpimg.imread(dst_folder + car_silhouettes[i])
# wydruk zdjęć
fig, ax = plt.subplots(1,2)
ax[0].imshow(img_A)
ax[1].imshow(img_B)

102
backend_scraping_final.py Normal file
View File

@ -0,0 +1,102 @@
# IMPORTOWANIE BIBLIOTEK
from fileinput import filename
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import urllib.request
import csv
# FUNKCJA ODPOWIADAJĄCA ZA ZAPISYWANIE ZDJĘĆ SAMOCHODÓW
def ZAPISYWANIE_ZDJĘĆ(opener, folder_path, miniaturka_link, id_oferty):
miniaturka_link = miniaturka_link.replace('/60/', '/800/')
for x in range(1, 10): ## zmieniając zasięg można ustawić ilość zdjęć pobieranych dla każdego auta (teraz ustawione jest na 10 zdjęć)
try:
opener.retrieve(f'{miniaturka_link[:-5]}{x}.jpg', f'E:\AUTOwycena\AUTOpictures\{id_oferty}_{x}.jpg')
except:
break
# FUNKCJA ODPOWIADAJĄCA ZA ZAPISYWANIE DANYCH TEKSTOWYCH W PLIKU CSV
def ZAPISYWANIE_DANYCH(opener, folder_path, oferta, oferta_link):
dane_oferty = oferta.find_elements(By.TAG_NAME, 'td')
miniaturka_link = oferta.find_element(By.TAG_NAME, 'a').find_element(By.TAG_NAME, 'img').get_attribute('src')
id_oferty = oferta_link.split('/id/')[-1]
marka = oferta.get_attribute('make')
model = oferta.get_attribute('model')
rodzaj_paliwa = dane_oferty[8].text
rok_produkcji = dane_oferty[10].text
przebieg = dane_oferty[12].text.replace(' ', '')
cena_start_aktualna = ';'.join(dane_oferty[14].text.split('\n')).replace(' ', '')
kosztorys_naprawy_ASO = dane_oferty[16].text.replace(' ', '')
wycena_przed = dane_oferty[18].text.replace(' ', '')
wycena_po = dane_oferty[20].text.replace(' ', '')
dane_oferty_razem = [id_oferty, marka, model, rodzaj_paliwa, rok_produkcji, przebieg, cena_start_aktualna, kosztorys_naprawy_ASO, wycena_przed, wycena_po]
with open(f'{folder_path}\AUTOwycena.csv', 'a', newline='') as file:
thewriter = csv.writer(file)
thewriter.writerow(dane_oferty_razem)
ZAPISYWANIE_ZDJĘĆ(opener, folder_path, miniaturka_link, id_oferty)
# FUNKCJA ODPOWIADAJĄCA ZA STWORZENIE LISTY WSZYSTKICH DOSTĘPNYCH OFERT DOTYCZĄCYCH SAMOCHODÓW
def LISTA_OFERT(driver):
dzisiejsze_oferty = driver.find_elements(By.CLASS_NAME, "listCarRow")
lista_ofert = []
lista_ofert_linki = []
for oferta in dzisiejsze_oferty:
lista_ofert.append(oferta)
lista_ofert_linki.append(oferta.find_element(By.TAG_NAME , "td").find_element(By.TAG_NAME , "a").get_attribute('href'))
liczba_ofert_dotyczacych_samochodow = int(driver.find_element(By.XPATH, '/html/body/div[2]/div[5]/div[2]/div/div/div[2]/div/div[1]/div[1]/div/span').text[1:-1])
return lista_ofert[:liczba_ofert_dotyczacych_samochodow], lista_ofert_linki[:liczba_ofert_dotyczacych_samochodow]
# FUNKCJA ODPOWIADAJĄCA ZA PROCES LOGOWANIA
def LOGOWANIE(driver):
logowanie = driver.find_element(By.XPATH, "/html/body/div[2]/div[4]/div/div[3]/ul/li[5]/table/tbody/tr/td/a")
actions = ActionChains(driver)
actions.move_to_element(logowanie)
actions.click(logowanie)
actions.perform()
login_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[2]/form/table/tbody/tr[1]/td/input')))
password_box = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[2]/form/table/tbody/tr[2]/td/input')))
login_box.send_keys('WrecarDemo1')
password_box.send_keys('WrecarDemo2022')
password_box.send_keys(Keys.RETURN)
# FUNKCJA ODPOWIADAJĄCA ZA CAŁY PROCES POBIERANIA
def POBIERANIE_DANYCH(driver, opener, folder_path):
driver.get('https://wrecar.pl/')
LOGOWANIE(driver)
driver.get("https://wrecar.pl/car/auction")
lista_ofert, lista_ofert_linki = LISTA_OFERT(driver)
for num in range(len(lista_ofert)):
ZAPISYWANIE_DANYCH(opener, folder_path, lista_ofert[num], lista_ofert_linki[num])
print(f'Zapisano dane {num/len(lista_ofert)*100:.2f}% ofert!')
if num == 4:
break
# FUNKCJA ZACZYNAJĄCA PROCES POBIERANIA DANYCH
def SELENIUM(ŚCIEŻKA_DO_CHROMEDRIVER_EXE, FOLDER_ZAPISU_DANYCH):
opener = urllib.request.URLopener()
opener.addheader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36')
options = webdriver.ChromeOptions()
# options.headless = True ## jeśli linijka jest zakomentowana to widać klienta przegląrki, jeśli NIE jest zakomentowana, to proces wykonuje się w tle
options.add_experimental_option('excludeSwitches', ['enable-logging'])
options.add_experimental_option("detach", True)
driver_service = Service(executable_path=ŚCIEŻKA_DO_CHROMEDRIVER_EXE)
driver = webdriver.Chrome(service=driver_service, options=options)
POBIERANIE_DANYCH(driver, opener, FOLDER_ZAPISU_DANYCH)
driver.quit()
# ROZPOCZĘCIE PROCESU POBIERANIA DANYCH
ŚCIEŻKA_DO_CHROMEDRIVER_EXE = '' ## np. 'C:\chromedriver.exe'
FOLDER_ZAPISU_DANYCH = '' ## np. 'E:\AUTOwycena\PicturesDatabase'
SELENIUM(ŚCIEŻKA_DO_CHROMEDRIVER_EXE, FOLDER_ZAPISU_DANYCH)