-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ddc1bf4
commit 91a3fa5
Showing
1 changed file
with
44 additions
and
65 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,87 +1,66 @@ | ||
import streamlit as st | ||
import requests | ||
from bs4 import BeautifulSoup | ||
import pyperclip | ||
from urllib.parse import urljoin, urlparse | ||
import html2text | ||
|
||
import os | ||
import pkg_resources | ||
|
||
REQUIRED_PACKAGES = [ | ||
'protobuf==3.20.0' | ||
] | ||
|
||
os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python' | ||
|
||
|
||
def get_sub_urls(url): | ||
try: | ||
response = requests.get(url) | ||
response.raise_for_status() | ||
except requests.exceptions.RequestException as e: | ||
st.write(f"Erreur lors de la récupération de l'URL : {e}") | ||
return [] | ||
|
||
soup = BeautifulSoup(response.content, 'html.parser') | ||
def crawl(url, base_url): | ||
# Récupérer le contenu du site | ||
response = requests.get(url) | ||
soup = BeautifulSoup(response.text, 'html.parser') | ||
|
||
# Rechercher tous les liens | ||
sub_urls = [] | ||
for link in soup.find_all('a'): | ||
href = link.get('href') | ||
if href and href.startswith('http'): # Vérifier si l'URL est absolue | ||
sub_urls.append(href) | ||
|
||
# Ignorer les liens qui n'ont pas d'attribut href ou qui sont des ancres | ||
if href is None or href.startswith('#'): | ||
continue | ||
|
||
# Joindre l'URL du lien avec l'URL de base du site pour obtenir un lien complet | ||
full_url = urljoin(base_url, href) | ||
|
||
# Vérifier si le lien est sur le même domaine | ||
if urlparse(full_url).netloc == urlparse(base_url).netloc: | ||
if full_url not in visited_urls: | ||
visited_urls.add(full_url) | ||
sub_urls.append(full_url) | ||
return sub_urls | ||
|
||
def extract_text(url): | ||
try: | ||
response = requests.get(url) | ||
if response.status_code == 200: | ||
soup = BeautifulSoup(response.content, "html.parser") | ||
return soup.get_text() | ||
else: | ||
return None | ||
except requests.exceptions.TooManyRedirects: | ||
st.write(f"Trop de redirections lors de la tentative d'accès à l'URL : {url}") | ||
return None | ||
def url_to_markdown(url): | ||
# Récupérer le contenu du site | ||
response = requests.get(url) | ||
response.encoding = 'utf-8' # Spécifiez l'encodage si nécessaire | ||
html_content = response.text | ||
|
||
# Utiliser BeautifulSoup pour analyser le contenu HTML | ||
soup = BeautifulSoup(html_content, 'html.parser') | ||
|
||
def main(): | ||
url = st.text_input("Veuillez entrer l'URL : ") | ||
if url: | ||
visited_urls = set() # Pour garder une trace des URL visitées | ||
summary = [] # Liste pour stocker le sommaire | ||
all_content = [] # Liste pour stocker tout le contenu | ||
# Utiliser html2text pour convertir le contenu HTML en Markdown | ||
h = html2text.HTML2Text() | ||
# Ignorer les liens dans le document | ||
h.ignore_links = True | ||
markdown_content = h.handle(soup.prettify()) | ||
|
||
main_text = extract_text(url) | ||
visited_urls.add(url) | ||
return markdown_content | ||
|
||
summary.append(f"URL principale : {url}") # Ajouter l'URL principale au sommaire | ||
all_content.append(main_text) # Ajouter le contenu principal à all_content | ||
def main(): | ||
base_url = st.text_input("Veuillez entrer l'URL : ") | ||
if base_url: | ||
global visited_urls | ||
visited_urls = set() # Pour garder une trace des URL visitées | ||
|
||
st.write(f"Texte extrait de l'URL principale : {url}\n{main_text}\n") | ||
# Utilisation des nouvelles méthodes | ||
markdown_content = url_to_markdown(base_url) | ||
st.markdown(markdown_content) # Utilisation de st.markdown pour afficher le contenu | ||
|
||
sub_urls = get_sub_urls(url) | ||
sub_urls = crawl(base_url, base_url) | ||
|
||
st.write("\nListe des sous-URLs :") | ||
for sub_url in sub_urls: | ||
if sub_url not in visited_urls: # Vérifier si l'URL a déjà été visitée | ||
with st.expander(sub_url): # Utilisation de st.expander pour créer un volet déroulant pour chaque sous-URL | ||
text = extract_text(sub_url) | ||
if text: | ||
st.write(f"Texte extrait de l'URL : {sub_url}\n{text}\n") | ||
all_content.append(text) # Ajouter le contenu de la sous-URL à all_content | ||
else: | ||
st.write(f"Échec de l'extraction du texte à partir de l'URL : {sub_url}\n") | ||
visited_urls.add(sub_url) # Ajouter l'URL à la liste des URL visitées | ||
|
||
summary.append(f"Sous-URL : {sub_url}") # Ajouter la sous-URL au sommaire | ||
|
||
with st.expander("Sommaire"): # Afficher le sommaire dans un volet déroulant | ||
for item in summary: | ||
st.write(item) | ||
|
||
with st.expander("Tout le contenu"): # Afficher tout le contenu dans un volet déroulant | ||
all_content_str = "\n".join(all_content) | ||
st.write(all_content_str) | ||
with st.expander(sub_url): # Utilisation de st.expander pour créer un volet déroulant pour chaque sous-URL | ||
markdown_content = url_to_markdown(sub_url) | ||
st.markdown(markdown_content) # Utilisation de st.markdown pour afficher le contenu | ||
|
||
if __name__ == "__main__": | ||
main() |