Web Scraper hizo en mente la IA y la simplicidad. Se ejecuta como una CLI que puede ser paralelizada y genera contenido de marcado de alta calidad.
Compartido:
Raspador:
Indexador:
# Install the package
python3 -m pip install scrape-it-now
# Run the CLI
scrape-it-now --help Para configurar la CLI (incluida la autenticación en los servicios de backend), use variables de entorno, un archivo .env o opciones de línea de comando.
La aplicación debe ejecutarse con Python 3.13 o posterior. Si esta versión no está instalada, una manera fácil de instalarla es Pyenv.
# Download the source code
git clone https://github.com/clemlesne/scrape-it-now.git
# Move to the directory
cd scrape-it-now
# Run install scripts
make install dev
# Run the CLI
scrape-it-now --helpUso con almacenamiento de blob de azure y almacenamiento de cola de azure:
# Azure Storage configuration
export AZURE_STORAGE_ACCESS_KEY=xxx
export AZURE_STORAGE_ACCOUNT_NAME=xxx
# Run the job
scrape-it-now scrape run https://nytimes.comUso con mancha de disco local y cola de disco local:
# Local disk configuration
export BLOB_PROVIDER=local_disk
export QUEUE_PROVIDER=local_disk
# Run the job
scrape-it-now scrape run https://nytimes.comEjemplo:
❯ scrape-it-now scrape run https://nytimes.com
2024-11-08T13:18:49.169320Z [info ] Start scraping job lydmtyz
2024-11-08T13:18:49.169392Z [info ] Installing dependencies if needed, this may take a few minutes
2024-11-08T13:18:52.542422Z [info ] Queued 1/1 URLs
2024-11-08T13:18:58.509221Z [info ] Start processing https://nytimes.com depth=1 process=scrape-lydmtyz-4 task=63dce50
2024-11-08T13:19:04.173198Z [info ] Loaded 154554 ads and trackers process=scrape-lydmtyz-4
2024-11-08T13:19:16.393045Z [info ] Queued 310/311 URLs depth=1 process=scrape-lydmtyz-4 task=63dce50
2024-11-08T13:19:16.393323Z [info ] Scraped depth=1 process=scrape-lydmtyz-4 task=63dce50
...Las opciones más frecuentes son:
Options | Descripción | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Clave de acceso de almacenamiento de Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nombre de la cuenta de almacenamiento de Azure | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Proveedor de blob | BLOB_PROVIDER |
--job-name-jn | Nombre de trabajo | JOB_NAME |
--max-depth-md | Profundidad máxima | MAX_DEPTH |
--queue-provider-qp | Proveedor de colas | QUEUE_PROVIDER |
--save-images-si | Guardar imágenes | SAVE_IMAGES |
--save-screenshot-ss | Guardar captura de pantalla | SAVE_SCREENSHOT |
--whitelist-w | Lista blanca | WHITELIST |
Para la documentación sobre todas las opciones disponibles, ejecute:
scrape-it-now scrape run --helpUso con Azure Blob Storage:
# Azure Storage configuration
export AZURE_STORAGE_CONNECTION_STRING=xxx
# Show the job status
scrape-it-now scrape status [job_name]Uso con mancha de disco local:
# Local disk configuration
export BLOB_PROVIDER=local_disk
# Show the job status
scrape-it-now scrape status [job_name]Ejemplo:
❯ scrape-it-now scrape status lydmtyz
{ " created_at " : " 2024-11-08T13:18:52.839060Z " , " last_updated " : " 2024-11-08T13:19:16.528370Z " , " network_used_mb " :2.6666793823242188, " processed " :1, " queued " :311}Las opciones más frecuentes son:
Options | Descripción | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Clave de acceso de almacenamiento de Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nombre de la cuenta de almacenamiento de Azure | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Proveedor de blob | BLOB_PROVIDER |
Para la documentación sobre todas las opciones disponibles, ejecute:
scrape-it-now scrape status --helpUso con almacenamiento de blob Azure, almacenamiento de colas de Azure y búsqueda de ai de Azure:
# Azure OpenAI configuration
export AZURE_OPENAI_API_KEY=xxx
export AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=xxx
export AZURE_OPENAI_EMBEDDING_DIMENSIONS=xxx
export AZURE_OPENAI_EMBEDDING_MODEL_NAME=xxx
export AZURE_OPENAI_ENDPOINT=xxx
# Azure Search configuration
export AZURE_SEARCH_API_KEY=xxx
export AZURE_SEARCH_ENDPOINT=xxx
# Azure Storage configuration
export AZURE_STORAGE_ACCESS_KEY=xxx
export AZURE_STORAGE_ACCOUNT_NAME=xxx
# Run the job
scrape-it-now index run [job_name]Uso con blob de disco local, cola de disco local y búsqueda de ai de Azure:
# Azure OpenAI configuration
export AZURE_OPENAI_API_KEY=xxx
export AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=xxx
export AZURE_OPENAI_EMBEDDING_DIMENSIONS=xxx
export AZURE_OPENAI_EMBEDDING_MODEL_NAME=xxx
export AZURE_OPENAI_ENDPOINT=xxx
# Azure Search configuration
export AZURE_SEARCH_API_KEY=xxx
export AZURE_SEARCH_ENDPOINT=xxx
# Local disk configuration
export BLOB_PROVIDER=local_disk
export QUEUE_PROVIDER=local_disk
# Run the job
scrape-it-now index run [job_name]Ejemplo:
❯ scrape-it-now index run lydmtyz
2024-11-08T13:20:37.129411Z [info ] Start indexing job lydmtyz
2024-11-08T13:20:38.945954Z [info ] Start processing https://nytimes.com process=index-lydmtyz-4 task=63dce50
2024-11-08T13:20:39.162692Z [info ] Chunked into 7 parts process=index-lydmtyz-4 task=63dce50
2024-11-08T13:20:42.407391Z [info ] Indexed 7 chunks process=index-lydmtyz-4 task=63dce50
...Las opciones más frecuentes son:
Options | Descripción | Environment variable |
|---|---|---|
--azure-openai-api-key-aoak | Llave de API de Azure OpenAI | AZURE_OPENAI_API_KEY |
--azure-openai-embedding-deployment-name-aoedn | Azure OpenAi incrustando el nombre de implementación | AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME |
--azure-openai-embedding-dimensions-aoed | Azure OpenAi incrustando las dimensiones | AZURE_OPENAI_EMBEDDING_DIMENSIONS |
--azure-openai-embedding-model-name-aoemn | Azure OpenAi Nombre del modelo de incrustación | AZURE_OPENAI_EMBEDDING_MODEL_NAME |
--azure-openai-endpoint-aoe | Azure OpenAi Endpoint | AZURE_OPENAI_ENDPOINT |
--azure-search-api-key-asak | Llave de API de búsqueda de Azure | AZURE_SEARCH_API_KEY |
--azure-search-endpoint-ase | Punto final de búsqueda de azul | AZURE_SEARCH_ENDPOINT |
--azure-storage-access-key-asak | Clave de acceso de almacenamiento de Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nombre de la cuenta de almacenamiento de Azure | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Proveedor de blob | BLOB_PROVIDER |
--queue-provider-qp | Proveedor de colas | QUEUE_PROVIDER |
Para la documentación sobre todas las opciones disponibles, ejecute:
scrape-it-now index run --help ---
Título: Proceso de raspado con almacenamiento de Azure
---
Gráfico LR
cli ["cli"]
web ["Sitio web"]
Subgraph "Almacenamiento de colas de Azure"
to_chunk ["para fragmentar"]
to_scrape ["para raspar"]
fin
Subgraph "Azure Blob Storage"
Subgraph "contenedor"
trabajo ["trabajo"]
raspado ["raspado"]
Estado ["Estado"]
fin
fin
CLI -(1) Mensaje de extracción -> to_scrape
CLI -(2) Obtenga caché -> raspado
CLI -(3) Examinar -> Web
CLI -(4) Actualización de caché -> raspado
CLI -(5) Estado de empuje -> Estado
CLI -(6) Agregar mensaje -> to_scrape
CLI -(7) Agregar mensaje -> to_chunk
CLI -(8) Estado de actualización -> trabajo
---
Título: Proceso de raspado con almacenamiento de Azure y búsqueda de ai de Azure
---
Gráfico LR
Buscar ["Azure AI Search"]
cli ["cli"]
Incrustaciones ["Azure OpenAi Incrustaciones"]
Subgraph "Almacenamiento de colas de Azure"
to_chunk ["para fragmentar"]
fin
Subgraph "Azure Blob Storage"
Subgraph "contenedor"
raspado ["raspado"]
fin
fin
CLI -(1) Mensaje de extracción -> to_chunk
CLI -(2) Obtenga caché -> raspado
CLI -(3) Fragmento -> CLI
CLI -(4) INSCRIVA -> INCREMENTOS
CLI -(5) Push to Search -> Búsqueda
El almacenamiento de blob está organizado en carpetas:
[job_name]-scraping/ # Job name (either defined by the user or generated)
scraped/ # All the data from the pages
[page_id]/ # Assets from a page
screenshot.jpeg # Screenshot (if enabled)
[image_id].[ext] # Image binary (if enabled)
[image_id].json # Image metadata (if enabled)
[page_id].json # Data from a page
state/ # Job states (cache & parallelization)
[page_id] # Page state
job.json # Job state (aggregated stats)Los datos de la página se consideran una API (no se romperá hasta la próxima versión principal) y se almacenan en formato JSON:
{
"created_at" : " 2024-09-11T14:06:43.566187Z " ,
"redirect" : " https://www.nytimes.com/interactive/2024/podcasts/serial-season-four-guantanamo.html " ,
"status" : 200 ,
"url" : " https://www.nytimes.com/interactive/2024/podcasts/serial-season-four-guantanamo.html " ,
"content" : " ## Listen to the trailer for Serial Season 4... " ,
"etag" : null ,
"links" : [
" https://podcasts.apple.com/us/podcast/serial/id917918570 " ,
" https://music.amazon.com/podcasts/d1022069-8863-42f3-823e-857fd8a7b616/serial?ref=dm_sh_OVBHkKYvW1poSzCOsBqHFXuLc " ,
...
],
"metas" : {
"description" : " “Serial” returns with a history of Guantánamo told by people who lived through key moments in Guantánamo’s evolution, who know things the rest of us don’t about what it’s like to be caught inside an improvised justice system. " ,
"articleid" : " 100000009373583 " ,
"twitter:site" : " @nytimes " ,
...
},
"network_used_mb" : 1.041460037231445 ,
"raw" : " <head>...</head><body>...</body> " ,
"valid_until" : " 2024-09-11T14:11:37.790570Z "
}Luego, los datos indexados se almacenan en Azure AI Search:
| Campo | Tipo | Descripción |
|---|---|---|
chunck_number | Edm.Int32 | Número de fragmento, de 0 a x |
content | Edm.String | Contenido de Chunck |
created_at | Edm.DateTimeOffset | Fecha de raspado de origen |
id | Edm.String | ID de chunck |
title | Edm.String | Título de la página de origen |
url | Edm.String | URL de la página de origen |
La opción Whitelist permite restringir a un dominio e ignorar las rutas subterráneas. Es una lista de expresiones regulares:
domain1,regexp1,regexp2 domain2,regexp3Para ejemplos:
A Whitelist learn.microsoft.com :
learn.microsoft.com A WhitList learn.microsoft.com y go.microsoft.com , pero ignora todas las rutas subconscendas excepto /en-us :
learn.microsoft.com, ^ /(?!en-us). * go.microsoft.com Para configurar fácilmente la CLI, las variables de entorno de origen de un archivo .env . Por ejemplo, para la opción --azure-storage-access-key :
AZURE_STORAGE_ACCESS_KEY=xxx Para los argumentos que aceptan múltiples valores, use una lista separada por el espacio. Por ejemplo, para la opción --whitelist :
WHITELIST=learn . microsoft . com go . microsoft . comLa cache directoty depende del sistema operativo:
~/.config/scrape-it-now (unix)~/Library/Application Support/scrape-it-now (macOS)C:Users<user>AppDataRoamingscrape-it-now (Windows)Los binarios del navegador se descargan o actualizan automáticamente en cada ejecución. El navegador es cromo y no es configurable (no dude en abrir un problema si necesita otro navegador), pesa alrededor de 450 MB. El caché se almacena en el directorio de caché.
El almacenamiento de disco local se utiliza tanto para Blob como para la cola. No se recomienda para el uso de producción, ya que no es fácilmente escalable y no es tolerante a fallas. Es útil para las pruebas y el desarrollo o cuando no puede usar los servicios de Azure.
Implementación:
Los proxies no se implementan en la aplicación. La seguridad de la red no se puede lograr desde el nivel de aplicación. Use una VPN (por ejemplo, su, tercero) o un servicio proxy (por ejemplo, Procies residenciales, TOR) para garantizar el anonimato y configurar el firewall del sistema para limitar el acceso a la red de aplicaciones.
Como la aplicación está empaquetada a PYPI, se puede agrupar fácilmente con un contenedor. En cada inicio, la aplicación descargará las dependencias (navegador, etc.) y los almacenará en caché. Puede pre-descargarlos ejecutando la scrape-it-now scrape install de comando.
Una buena técnica para el rendimiento también paralelizaría los trabajos de raspado e indexación al ejecutar múltiples contenedores de cada uno. Esto se puede lograr con KEDA, configurando un escalador de cola.