search-duckduck

This commit is contained in:
Your Name
2026-03-29 14:04:59 +00:00
parent 94e6e2d0e2
commit 6c2ea14590
+36 -16
View File
@@ -1,32 +1,32 @@
#!/usr/bin/env python #!/usr/bin/env python
import sys import sys
import subprocess import subprocess
# Vérifie et installe bs4 si nécessaire # Vérifie et installe les dépendances si nécessaire
def ensure_package(pkg):
try: try:
from bs4 import BeautifulSoup __import__(pkg)
except ImportError: except ImportError:
print("bs4 non trouvé, installation en cours...") print(f"{pkg} non trouvé, installation...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "beautifulsoup4"]) subprocess.check_call([sys.executable, "-m", "pip", "install", pkg])
from bs4 import BeautifulSoup
ensure_package("bs4")
ensure_package("requests")
from bs4 import BeautifulSoup
import requests import requests
import argparse import argparse
def recherche_duckduckgo(query, n=5): def recherche_duckduckgo(query, n=5):
url = "https://html.duckduckgo.com/html/" url = "https://html.duckduckgo.com/html/"
params = {"q": query} headers = {"User-Agent": "Mozilla/5.0"}
headers = { response = requests.post(url, data={"q": query}, headers=headers)
"User-Agent": "Mozilla/5.0"
}
response = requests.post(url, data=params, headers=headers)
soup = BeautifulSoup(response.text, "html.parser") soup = BeautifulSoup(response.text, "html.parser")
results = [] results = []
for result in soup.find_all("a", class_="result__a", limit=n): for result in soup.find_all("a", class_="result__a", limit=n):
title = result.get_text() title = result.get_text()
link = result.get("href") link = result.get("href")
@@ -35,18 +35,38 @@ def recherche_duckduckgo(query, n=5):
return results return results
def extract_text(url, max_chars=300):
try:
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers, timeout=5)
soup = BeautifulSoup(response.text, "html.parser")
# Récupère le texte brut
text = soup.get_text(separator=" ", strip=True)
return text[:max_chars] + "..."
except Exception as e:
return f"[Erreur lors de l'accès au site: {e}]"
def main(): def main():
parser = argparse.ArgumentParser(description="Recherche DuckDuckGo simple") parser = argparse.ArgumentParser(description="Recherche + extraction de texte")
parser.add_argument("query", type=str, help="Terme de recherche") parser.add_argument("query", type=str, help="Terme de recherche")
parser.add_argument("-n", "--number", type=int, default=5, help="Nombre de résultats") parser.add_argument("-n", "--number", type=int, default=3, help="Nombre de résultats")
parser.add_argument("--chars", type=int, default=300, help="Nombre de caractères à extraire")
args = parser.parse_args() args = parser.parse_args()
results = recherche_duckduckgo(args.query, args.number) results = recherche_duckduckgo(args.query, args.number)
for i, (title, link) in enumerate(results, 1): for i, (title, link) in enumerate(results, 1):
print(f"{i}. {title}") print(f"\n{i}. {title}")
print(f" {link}\n") print(f"URL: {link}")
snippet = extract_text(link, args.chars)
print(f"Extrait: {snippet}")
if __name__ == "__main__": if __name__ == "__main__":