Implementaciones prácticas
Escenarios de búsqueda web del mundo real
1. Crawler de investigación académica
import requests
from bs4 import BeautifulSoup
import pandas as pd
def academic_search(keywords, num_results=10):
base_url = "https://scholar.google.com/scholar"
params = {"q": keywords, "hl": "en"}
results = []
response = requests.get(base_url, params=params)
soup = BeautifulSoup(response.text, 'html.parser')
for result in soup.find_all('div', class_='gs_ri')[:num_results]:
title = result.find('h3', class_='gs_rt').text
abstract = result.find('div', class_='gs_rs').text
results.append({
'title': title,
'abstract': abstract
})
return pd.DataFrame(results)
Estrategias de implementación de búsqueda
2. Herramienta de comparación de precios
def compare_product_prices(product_name):
search_engines = {
'Amazon': f"https://www.amazon.com/s?k={product_name}",
'eBay': f"https://www.ebay.com/sch/i.html?_nkw={product_name}"
}
price_comparisons = {}
for platform, url in search_engines.items():
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
prices = soup.find_all('span', class_='price')
price_comparisons[platform] = [float(p.text.replace('$', '')) for p in prices[:5]]
return price_comparisons
Visualización del flujo de trabajo de búsqueda
graph TD
A[Search Query] --> B[Select Sources]
B --> C[Send Requests]
C --> D[Parse Results]
D --> E[Extract Data]
E --> F[Analyze/Process]
F --> G[Present Findings]
Técnicas de búsqueda avanzadas
def aggregate_search_results(query):
sources = [
{'name': 'Wikipedia', 'url': f"https://en.wikipedia.org/w/index.php?search={query}"},
{'name': 'News', 'url': f"https://news.google.com/search?q={query}"}
]
aggregated_results = {}
for source in sources:
response = requests.get(source['url'])
soup = BeautifulSoup(response.text, 'html.parser')
results = soup.find_all('div', class_='result')
aggregated_results[source['name']] = [
result.text for result in results[:3]
]
return aggregated_results
Comparación de implementaciones de búsqueda
| Técnica |
Complejidad |
Caso de uso |
Rendimiento |
| Solicitudes básicas |
Baja |
Búsquedas simples |
Rápido |
| Análisis con BeautifulSoup |
Media |
Datos estructurados |
Moderado |
| Agregación de múltiples fuentes |
Alta |
Investigación integral |
Más lento |
Manejo de errores y robustez
def robust_search(query, max_retries=3):
for attempt in range(max_retries):
try:
results = perform_search(query)
return results
except requests.RequestException as e:
print(f"Search attempt {attempt + 1} failed: {e}")
time.sleep(2) ## Wait before retry
return None
Mejores prácticas para desarrolladores de LabEx
- Implementar un manejo de errores completo
- Utilizar límites de tasa
- Almacenar en caché los resultados de búsqueda
- Respetar los términos de servicio de los sitios web
Al dominar estas implementaciones prácticas, los desarrolladores pueden crear soluciones de búsqueda web sofisticadas que extraigan información valiosa de manera eficiente y ética.