import os import requests import streamlit as st from bs4 import BeautifulSoup from urllib.parse import urljoin from PIL import Image from io import BytesIO def is_excluded_image(img_url): # Проверяем, является ли URL изображения исключенным excluded_keywords = ['flags/ru.png', 'flags/en.png', 'API.v2/Icons/Menu.png', 'mc.yandex.ru', 'Minis'] return any(keyword in img_url for keyword in excluded_keywords) def is_excluded_element(link): # Проверяем, является ли элемент исключенным excluded_parents = ['CatSetupText', 'CatSetupDialog', 'ErrorFoundText', 'ErrorFoundDialog'] parent_id = link.find_parent().get('id', '') return parent_id in excluded_parents def main(): st.title("Car Catalog Information") vin_code = st.text_input("Введите VIN-код:") if st.button("Поиск"): get_car_info(vin_code) def get_car_info(vin): url = f"https://www.ilcats.ru/?vin={vin}&VinAction=Search" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text, 'lxml') catalog_link = soup.find('a', {'href': lambda x: x and '/vw/?VinAction=Choose' in x}) if catalog_link: catalog_url = urljoin(url, catalog_link['href']) st.write(f"Ссылка на каталог: {catalog_url}") links_dict = {} while True: catalog_response = requests.get(catalog_url, headers=headers) if catalog_response.status_code == 200: catalog_soup = BeautifulSoup(catalog_response.text, 'lxml') catalog_links = catalog_soup.find_all('a', href=True) links_dict.clear() for link in catalog_links: absolute_link = urljoin(catalog_url, link['href']) link_text = link.text.strip() if not is_excluded_element(link): links_dict[link_text] = absolute_link for i, (text, link) in enumerate(links_dict.items(), 1): st.write(f"{i}. {text}") selected_link_number = st.number_input("Выберите номер ссылки для перехода (0 для выхода): ", min_value=0) if selected_link_number == 0: break elif 1 <= selected_link_number <= len(links_dict): selected_link = list(links_dict.values())[selected_link_number - 1] st.write(f"Переход по выбранной ссылке: {selected_link}") catalog_url = selected_link images = catalog_soup.find_all('img', src=True) for i, img in enumerate(images, 1): img_url = urljoin(catalog_url, img['src']) if not is_excluded_image(img_url): response_img = requests.get(img_url) if response_img.status_code == 200: img_data = BytesIO(response_img.content) img = Image.open(img_data) img_filename = f"image_{i}.png" img.save(img_filename) st.image(img) else: st.write("Неверный номер ссылки. Попробуйте еще раз.") else: st.write(f"Ошибка при запросе к каталогу: {catalog_response.status_code}") break st.write("Выход из программы.") else: st.write("Ссылка на каталог не найдена") else: st.write(f"Ошибка при запросе: {response.status_code}") if __name__ == "__main__": main()