tarea_apify_bs4_model avatar

tarea_apify_bs4_model

Pricing

Pay per usage

Go to Apify Store
tarea_apify_bs4_model

tarea_apify_bs4_model

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Carmen Cruzado

Carmen Cruzado

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 days ago

Last modified

Categories

Features

Limited permissions

Share

mcgee.cat scraper — búsqueda difusa de palabras + tópicos frecuentes

Actor de web scraping en Python que recorre las páginas de mcgee.cat (home, publications, projects y fun), las convierte a texto plano y las analiza de dos formas:

  • count_word: cuenta cuántas veces aparecen una o más palabras o frases, con búsqueda aproximada (RapidFuzz), sin distinguir mayúsculas ni acentos, e incluyendo variantes y errores de tipeo.
  • top_topics: detecta los tópicos más frecuentes del sitio agrupando oraciones con TF-IDF + KMeans (scikit-learn).

Los parámetros se pasan por input, definido en el input schema. El HTML se descarga con HTTPX2, se procesa con Beautiful Soup y el resultado se guarda en un dataset.

Included features

  • Apify SDK for Python: toolkit para construir Actors y scrapers en Python
  • Input schema: define y valida los parámetros del actor
  • Dataset: almacena el resultado como datos estructurados
  • HTTPX2: requests HTTP asíncronos
  • Beautiful Soup: extracción de datos de HTML
  • RapidFuzz: similitud de cadenas para la búsqueda aproximada
  • scikit-learn: TF-IDF, KMeans y silhouette score para los tópicos

Input

ParámetroTipoDefaultDescripción
urlstringhttps://www.mcgee.cat/URL base del sitio
fullbooleanfalseIncluye también el texto de cada publicación
wordsarray["Engineer"]Palabras o frases a buscar
thresholdinteger85Similitud mínima (0-100). Búsquedas de 3 caracteres o menos son siempre exactas
scorerstringratioratio, partial_ratio, token_sort_ratio, token_set_ratio o WRatio
top_topicsinteger3Cantidad de tópicos a devolver
n_clustersinteger0Clusters de KMeans. 0 = automático por silhouette
n_termsinteger5Términos clave por tópico
n_examplesinteger3Oraciones de ejemplo por tópico
stop_wordsstringenglishenglish o none
extra_stop_wordsarray[]Palabras adicionales a ignorar

Ejemplo:

{
"url": "https://www.mcgee.cat/",
"words": ["Engineer", "zero knowledge", "privacy"],
"threshold": 85,
"top_topics": 3
}

Output

Una fila en el dataset con tres keys:

{
"count_word": {
"Engineer": {
"count": 4,
"sentences": ["I'm a engineer from Ireland...", "💚 Engineer @ Aztec"],
"variants": {
"engineer": {"count": 2, "score": 100.0},
"engineers": {"count": 1, "score": 94.1}
}
}
},
"content": {
"1": "texto plano de la home",
"2": "texto plano de publications",
"3": "texto plano de projects",
"4": "texto plano de fun"
},
"top_topics": [
{
"rank": 1,
"size": 6,
"share": 0.545,
"terms": ["privacy", "solana", "engineer"],
"sentences": ["Engineer at Solana Foundation focused on privacy..."]
}
]
}
  • count_word: por cada búsqueda, el total de apariciones, las oraciones que la contienen y las variantes encontradas con su puntaje.
  • content: texto plano numerado por página, en orden de visita.
  • top_topics: clusters ordenados por cantidad de oraciones (size), con su proporción (share), términos clave y oraciones representativas.

How it works

  1. Actor.get_input() obtiene los parámetros del input.
  2. get_soup() descarga cada página con httpx2.AsyncClient y la carga con BeautifulSoup(response.content, 'lxml').
  3. page_text() quita nav, header y footer, y convierte el HTML en texto plano con una línea por bloque. Con full: true, publication_paths() agrega las publicaciones a la lista de páginas.
  4. normalize(), tokenize() y split_sentences() pasan el texto a minúsculas, le quitan los acentos y lo separan en palabras y oraciones.
  5. SentenceIndex indexa los n-gramas de cada oración, para buscar tanto palabras sueltas como frases.
  6. fuzzy_count() compara cada búsqueda contra el vocabulario con rapidfuzz.process.extract y arma count_word.
  7. find_topics() vectoriza las oraciones con TfidfVectorizer (unigramas y bigramas), las agrupa con KMeans, elige el número de clusters por silhouette, toma los más grandes y los describe con topic_terms(). Así arma top_topics.
  8. Actor.push_data({...}) guarda el resultado en el dataset.

Resources

Getting started

Para la información completa, ver este artículo. En resumen:

  1. Build the Actor
  2. Run the Actor

Para correrlo localmente:

pip install -r requirements.txt
apify run --input '{"url":"https://www.mcgee.cat/","words":["Engineer"]}'

El resultado queda en storage/datasets/default/.

Pull the Actor for local development

Si querés desarrollar localmente, podés bajar el actor desde la consola de Apify con Apify CLI:

  1. Instalá apify-cli

    Con Homebrew

    $brew install apify-cli

    Con NPM

    $npm -g install apify-cli
  2. Bajá el actor con su <ActorId>, que puede ser:

    • el nombre único del actor (ej.: "apify/hello-world")
    • o su ID (ej.: "E2jjCZBezvAZnX8Rb")

    Los dos aparecen al hacer clic en el título del actor, arriba de la página.

    Este comando copia el actor al directorio actual:

    $apify pull <ActorId>

Documentation reference