Felguk commited on
Commit
0eaed2f
·
verified ·
1 Parent(s): 3c69552

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -5
app.py CHANGED
@@ -1,6 +1,7 @@
1
  import gradio as gr
2
  import requests
3
- from urllib.parse import urlparse
 
4
 
5
  def is_valid_url(url):
6
  """Проверяет, является ли строка валидным URL."""
@@ -10,9 +11,29 @@ def is_valid_url(url):
10
  except:
11
  return False
12
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  def convert_to_text(url):
14
  if not is_valid_url(url):
15
- return "Ошибка: Введите корректный URL.", "", None # Возвращаем сообщение об ошибке, пустую строку и None для файла
16
 
17
  try:
18
  # Устанавливаем заголовки, чтобы имитировать запрос от браузера
@@ -32,9 +53,12 @@ def convert_to_text(url):
32
  with open(file_path, "w", encoding="utf-8") as file:
33
  file.write(response.text)
34
 
35
- return results, response.text, file_path # Возвращаем результаты, содержимое и путь к файлу
 
 
 
36
  except requests.exceptions.RequestException as e:
37
- return f"Ошибка: {e}", "", None # Возвращаем сообщение об ошибке, пустую строку и None для файла
38
 
39
  # HTML и JavaScript для кнопки "Скопировать код"
40
  copy_button_html = """
@@ -71,7 +95,22 @@ with gr.Blocks(css=css) as demo:
71
  file_output = gr.File(label="Скачать файл", visible=False) # Скрытый компонент для скачивания файла
72
 
73
  submit_button = gr.Button("Загрузить")
74
- submit_button.click(fn=convert_to_text, inputs=url_input, outputs=[results_output, text_output, file_output])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  # Запускаем интерфейс
77
  demo.launch()
 
1
  import gradio as gr
2
  import requests
3
+ from urllib.parse import urlparse, urljoin
4
+ from bs4 import BeautifulSoup
5
 
6
  def is_valid_url(url):
7
  """Проверяет, является ли строка валидным URL."""
 
11
  except:
12
  return False
13
 
14
+ def extract_additional_resources(url):
15
+ """Извлекает ссылки на CSS, JS и изображения из HTML-кода."""
16
+ try:
17
+ response = requests.get(url)
18
+ response.raise_for_status()
19
+ soup = BeautifulSoup(response.text, "html.parser")
20
+
21
+ # Извлекаем ссылки на CSS
22
+ css_links = [urljoin(url, link["href"]) for link in soup.find_all("link", rel="stylesheet") if "href" in link.attrs]
23
+
24
+ # Извлекаем ссылки на JS
25
+ js_links = [urljoin(url, script["src"]) for script in soup.find_all("script") if "src" in script.attrs]
26
+
27
+ # Извлекаем ссылки на изображения
28
+ img_links = [urljoin(url, img["src"]) for img in soup.find_all("img") if "src" in img.attrs]
29
+
30
+ return css_links, js_links, img_links
31
+ except Exception as e:
32
+ return [], [], []
33
+
34
  def convert_to_text(url):
35
  if not is_valid_url(url):
36
+ return "Ошибка: Введите корректный URL.", "", None, [], [], [] # Возвращаем сообщение об ошибке и пустые данные
37
 
38
  try:
39
  # Устанавливаем заголовки, чтобы имитировать запрос от браузера
 
53
  with open(file_path, "w", encoding="utf-8") as file:
54
  file.write(response.text)
55
 
56
+ # Извлекаем дополнительные ресурсы
57
+ css_links, js_links, img_links = extract_additional_resources(url)
58
+
59
+ return results, response.text, file_path, css_links, js_links, img_links
60
  except requests.exceptions.RequestException as e:
61
+ return f"Ошибка: {e}", "", None, [], [], [] # Возвращаем сообщение об ошибке и пустые данные
62
 
63
  # HTML и JavaScript для кнопки "Скопировать код"
64
  copy_button_html = """
 
95
  file_output = gr.File(label="Скачать файл", visible=False) # Скрытый компонент для скачивания файла
96
 
97
  submit_button = gr.Button("Загрузить")
98
+ submit_button.click(
99
+ fn=convert_to_text,
100
+ inputs=url_input,
101
+ outputs=[results_output, text_output, file_output, gr.Textbox(label="CSS-файлы"), gr.Textbox(label="JS-файлы"), gr.Textbox(label="Изображения")]
102
+ )
103
+
104
+ # Добавляем Accordion для скрытия/показа дополнительных ресурсов
105
+ with gr.Accordion("Показать/Скрыть дополнительные ресурсы", open=False):
106
+ gr.Markdown("### CSS-файлы")
107
+ css_output = gr.Textbox(label="CSS-файлы", interactive=False)
108
+
109
+ gr.Markdown("### JS-файлы")
110
+ js_output = gr.Textbox(label="JS-файлы", interactive=False)
111
+
112
+ gr.Markdown("### Изображения")
113
+ img_output = gr.Textbox(label="Изображения", interactive=False)
114
 
115
  # Запускаем интерфейс
116
  demo.launch()