50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/usr/bin/env python3
 | 
						|
'''
 | 
						|
Author: LuisGuLo
 | 
						|
Release: v1.6
 | 
						|
ChangeLog:
 | 
						|
    v1.6: Peticion simple y extraccion
 | 
						|
    v1.5: browsers de consola y dumps
 | 
						|
    v1.4: Uso de requests-html
 | 
						|
    v1.3: Modulos y venv
 | 
						|
    v1.2: Peticion con user-agent
 | 
						|
    v1.1: Peticion web mediante query
 | 
						|
    v1.0: PoC inicial bash. Cambio a python.
 | 
						|
'''
 | 
						|
import sys
 | 
						|
import requests
 | 
						|
from bs4 import BeautifulSoup
 | 
						|
 | 
						|
def mostrar_ayuda():
 | 
						|
    print("══════════════════════════════════════════════════════════════")
 | 
						|
    print("Uso: ./pip_busca <cadena_busqueda>")
 | 
						|
    print("\nBusca paquetes en PyPI cuyo nombre contenga la cadena indicada")
 | 
						|
    print("Ejemplo: ./pip_busca ansi")
 | 
						|
    print("══════════════════════════════════════════════════════════════")
 | 
						|
 | 
						|
if len(sys.argv) < 2 or sys.argv[1] in ["--help", "-h"]:
 | 
						|
    mostrar_ayuda()
 | 
						|
    sys.exit(0)
 | 
						|
 | 
						|
busqueda = sys.argv[1].lower()
 | 
						|
url = "https://pypi.org/simple/"
 | 
						|
 | 
						|
try:
 | 
						|
    response = requests.get(url)
 | 
						|
    response.raise_for_status()
 | 
						|
except requests.RequestException as e:
 | 
						|
    print(f"❌ Error al conectar con PyPI: {e}")
 | 
						|
    sys.exit(1)
 | 
						|
 | 
						|
soup = BeautifulSoup(response.text, "html.parser")
 | 
						|
paquetes = [a.text for a in soup.find_all("a")]
 | 
						|
coincidentes = [p for p in paquetes if busqueda in p.lower()]
 | 
						|
 | 
						|
print(f"\n🔍 Paquetes que contienen '{busqueda}':\n")
 | 
						|
if not coincidentes:
 | 
						|
    print("❌ No se encontraron coincidencias.")
 | 
						|
else:
 | 
						|
    for nombre in coincidentes:
 | 
						|
        print(f"📦 {nombre}")
 | 
						|
 |