Starchik commited on
Commit
fc331a5
1 Parent(s): 156646c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -111
app.py CHANGED
@@ -1,120 +1,49 @@
1
- import os
2
  import requests
3
  from bs4 import BeautifulSoup
4
- from urllib.parse import urljoin
5
- from PIL import Image
6
- from io import BytesIO
7
 
8
-
9
- def is_excluded_image(img_url):
10
- # Проверяем, является ли URL изображения исключенным
11
- excluded_keywords = ['flags/ru.png', 'flags/en.png', 'API.v2/Icons/Menu.png', 'mc.yandex.ru', 'Minis']
12
- return any(keyword in img_url for keyword in excluded_keywords)
13
-
14
-
15
- def is_excluded_element(link):
16
- # Проверяем, является ли элемент исключенным
17
- excluded_parents = ['CatSetupText', 'CatSetupDialog', 'ErrorFoundText', 'ErrorFoundDialog']
18
-
19
- parent_id = link.find_parent().get('id', '')
20
-
21
- return parent_id in excluded_parents
22
-
23
- def get_car_info(vin):
24
- url = f"https://www.ilcats.ru/?vin={vin}&VinAction=Search"
25
-
26
- # Добавляем заголовки User-Agent
27
  headers = {
28
- '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'}
29
-
30
- # Отправляем GET-запрос с заголовками
31
  response = requests.get(url, headers=headers)
32
 
33
  if response.status_code == 200:
34
- # Используем lxml в качестве парсера
35
- soup = BeautifulSoup(response.text, 'lxml')
36
-
37
- # Находим ссылку на каталог
38
- catalog_link = soup.find('a', {'href': lambda x: x and '/vw/?VinAction=Choose' in x})
39
-
40
- if catalog_link:
41
- catalog_url = urljoin(url, catalog_link['href'])
42
- print(f"Ссылка на каталог: {catalog_url}")
43
-
44
- # Создаем список для хранения абсолютных ссылок и их текстовых подписей
45
- links_dict = {}
46
-
47
- while True:
48
- # Отправим запрос на страницу каталога и извлечем все ссылки
49
- catalog_response = requests.get(catalog_url, headers=headers)
50
-
51
- if catalog_response.status_code == 200:
52
- catalog_soup = BeautifulSoup(catalog_response.text, 'lxml')
53
-
54
- # Находим все ссылки на странице каталога
55
- catalog_links = catalog_soup.find_all('a', href=True)
56
-
57
- links_dict.clear() # Очищаем словарь перед заполнением новыми данными
58
-
59
- for link in catalog_links:
60
- absolute_link = urljoin(catalog_url, link['href'])
61
- link_text = link.text.strip()
62
-
63
- # Проверяем, исключен ли текущий элемент
64
- if not is_excluded_element(link):
65
- links_dict[link_text] = absolute_link
66
-
67
- # Выводим список доступных ссылок с их текстовыми подписями
68
- for i, (text, link) in enumerate(links_dict.items(), 1):
69
- print(f"{i}. {text}")
70
-
71
- # Запрашиваем у пользователя номер выбранной ссылки
72
- selected_link_number = int(input("Выберите номер ссылки для перехода (0 для выхода): "))
73
-
74
- if selected_link_number == 0:
75
- break
76
-
77
- elif 1 <= selected_link_number <= len(links_dict):
78
- selected_link = list(links_dict.values())[selected_link_number - 1]
79
- print(f"Переход по выбранной ссылке: {selected_link}")
80
-
81
- # Обновляем ссылку каталога для следующего запроса
82
- catalog_url = selected_link
83
-
84
- # Отобразим изображения на странице
85
- images = catalog_soup.find_all('img', src=True)
86
- for i, img in enumerate(images, 1):
87
- img_url = urljoin(catalog_url, img['src'])
88
-
89
- # Исключаем определенные изображения
90
- if not is_excluded_image(img_url):
91
- response_img = requests.get(img_url)
92
- if response_img.status_code == 200:
93
- img_data = BytesIO(response_img.content)
94
- img = Image.open(img_data)
95
-
96
- # Сохраняем изображение на диск
97
- img_filename = f"image_{i}.png"
98
- img.save(img_filename)
99
-
100
- # Открываем изображение с помощью стандартного приложения
101
- os.startfile(img_filename)
102
-
103
- else:
104
- print("Неверный номер ссылки. Попробуйте еще раз.")
105
-
106
- else:
107
- print(f"Ошибка при запросе к каталогу: {catalog_response.status_code}")
108
- break
109
-
110
- print("Выход из программы.")
111
-
112
  else:
113
- print("Ссылка на каталог не найдена")
114
-
115
  else:
116
- print(f"Ошибка при запросе: {response.status_code}")
117
-
118
- # Пример использования
119
- vin_code = "wvwzzz3bzxp079085"
120
- get_car_info(vin_code)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
  import requests
3
  from bs4 import BeautifulSoup
 
 
 
4
 
5
+ def get_vin_info(vin_code):
6
+ url = f"https://www.ilcats.ru/?vin={vin_code}&VinAction=Search"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  headers = {
8
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
9
+ }
 
10
  response = requests.get(url, headers=headers)
11
 
12
  if response.status_code == 200:
13
+ soup = BeautifulSoup(response.content, "html.parser")
14
+ vin_card = soup.find("div", class_="VinCard")
15
+ if vin_card:
16
+ # Убираем определенные строки из текста VinCard перед отображением на странице
17
+ unwanted_texts = ["Открыть каталог", "Список опций", "Свернуть"]
18
+ cleaned_html = str(vin_card)
19
+ for text in unwanted_texts:
20
+ cleaned_html = cleaned_html.replace(text, "")
21
+
22
+ return cleaned_html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  else:
24
+ return "Информация о VIN-коде не найдена"
 
25
  else:
26
+ return "Ошибка при получении информации"
27
+
28
+ def main():
29
+ # Добавляем кликабельную надпись AlfaCross сверху
30
+ st.markdown("[AlfaCross](https://t.me/alfacross_bot)")
31
+
32
+ st.title("VIN Info Web App")
33
+
34
+ vin_code = st.text_input("Введите VIN-код:")
35
+
36
+ if st.button("Получить информацию"):
37
+ info = get_vin_info(vin_code)
38
+ st.markdown(info, unsafe_allow_html=True)
39
+
40
+ # Добавляем надпись Starchik снизу
41
+ st.markdown("[Starchik](https://t.me/Starchik_1)")
42
+
43
+ # Добавим обработку GET-запросов
44
+ if "vin_code" in st.query_params:
45
+ vin_code = st.query_params["vin_code"]
46
+ info = get_vin_info(vin_code)
47
+ st.markdown(info, unsafe_allow_html=True)
48
+ else:
49
+ main()