Scraper Web a fait l'origine de l'IA et de la simplicité. Il fonctionne comme une CLI qui peut être parallélisée et publie un contenu de marque de haute qualité.
Commun:
Grattoir:
Indexeur:
# Install the package
python3 -m pip install scrape-it-now
# Run the CLI
scrape-it-now --help Pour configurer la CLI (y compris l'authentification des services backend), utilisez des variables d'environnement, un fichier .env ou des options de ligne de commande.
L'application doit être exécutée avec Python 3.13 ou version ultérieure. Si cette version n'est pas installée, un moyen facile de l'installer est 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 --helpUtilisation avec stockage Azure Blob et stockage de file d'attente 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.comUtilisation avec un blob de disque local et une file d'attente de disque locale:
# Local disk configuration
export BLOB_PROVIDER=local_disk
export QUEUE_PROVIDER=local_disk
# Run the job
scrape-it-now scrape run https://nytimes.comExemple:
❯ 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
...Les options les plus fréquentes sont:
Options | Description | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Clé d'accès au stockage Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nom du compte de stockage Azure | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Fournisseur blob | BLOB_PROVIDER |
--job-name-jn | Nom de travail | JOB_NAME |
--max-depth-md | Profondeur maximale | MAX_DEPTH |
--queue-provider-qp | Fournisseur de file d'attente | QUEUE_PROVIDER |
--save-images-si | Enregistrer les images | SAVE_IMAGES |
--save-screenshot-ss | Enregistrer la capture d'écran | SAVE_SCREENSHOT |
--whitelist-w | Liste blanche | WHITELIST |
Pour la documentation sur toutes les options disponibles, exécutez:
scrape-it-now scrape run --helpUtilisation avec stockage Azure Blob:
# Azure Storage configuration
export AZURE_STORAGE_CONNECTION_STRING=xxx
# Show the job status
scrape-it-now scrape status [job_name]Utilisation avec un disque local Blob:
# Local disk configuration
export BLOB_PROVIDER=local_disk
# Show the job status
scrape-it-now scrape status [job_name]Exemple:
❯ 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}Les options les plus fréquentes sont:
Options | Description | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Clé d'accès au stockage Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nom du compte de stockage Azure | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Fournisseur blob | BLOB_PROVIDER |
Pour la documentation sur toutes les options disponibles, exécutez:
scrape-it-now scrape status --helpUtilisation avec stockage Azure Blob, stockage de file d'attente Azure et recherche Azure AI:
# 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]Utilisation avec blob de disque local, file d'attente de disque locale et recherche Azure AI:
# 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]Exemple:
❯ 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
...Les options les plus fréquentes sont:
Options | Description | Environment variable |
|---|---|---|
--azure-openai-api-key-aoak | Clé Azure Openai API | AZURE_OPENAI_API_KEY |
--azure-openai-embedding-deployment-name-aoedn | Nom de déploiement Azure Openai | AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME |
--azure-openai-embedding-dimensions-aoed | Dimensions d'intégration d'Openai Azure | AZURE_OPENAI_EMBEDDING_DIMENSIONS |
--azure-openai-embedding-model-name-aoemn | Nom du modèle d'intégration Azure Openai | AZURE_OPENAI_EMBEDDING_MODEL_NAME |
--azure-openai-endpoint-aoe | Point final Azure Openai | AZURE_OPENAI_ENDPOINT |
--azure-search-api-key-asak | Clé Azure Search API | AZURE_SEARCH_API_KEY |
--azure-search-endpoint-ase | Point de terminaison de recherche azure | AZURE_SEARCH_ENDPOINT |
--azure-storage-access-key-asak | Clé d'accès au stockage Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nom du compte de stockage Azure | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Fournisseur blob | BLOB_PROVIDER |
--queue-provider-qp | Fournisseur de file d'attente | QUEUE_PROVIDER |
Pour la documentation sur toutes les options disponibles, exécutez:
scrape-it-now index run --help ---
Titre: Strape Process with Azure Storage
---
graphique LR
CLI ["CLI"]
Web ["site Web"]
Sub-Graph "stockage de file d'attente azur"
to_chunk ["à chunk"]
to_scrapes ["pour gratter"]
fin
Sub-Graph "Azure Blob Storage"
subgraph "conteneur"
Job ["travail"]
gratté ["gratté"]
État ["État"]
fin
fin
CLI - (1) Tirez Message -> TO_SCRAPE
CLI - (2) Obtenez du cache -> gratté
CLI - (3) Parcourir -> Web
CLI - (4) Mettre à jour le cache -> gratté
CLI - (5) État push -> État
CLI - (6) Ajouter un message -> à_scrap
CLI - (7) Ajouter un message -> à_chunk
CLI - (8) Mettez à jour l'état -> Job
---
Titre: Strape Process with Azure Storage et Azure AI Search
---
graphique LR
Recherche ["Azure AI Search"]
CLI ["CLI"]
Embeddings ["Azure Openai Embeddings"]
Sub-Graph "stockage de file d'attente azur"
to_chunk ["à chunk"]
fin
Sub-Graph "Azure Blob Storage"
subgraph "conteneur"
gratté ["gratté"]
fin
fin
CLI - (1) Tirez le message -> à_chunk
CLI - (2) Obtenez du cache -> gratté
CLI - (3) morceau -> CLI
CLI - (4) intégrer -> intégres
CLI - (5) Push to Search -> Rechercher
Le stockage blob est organisé dans les dossiers:
[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)Les données de la page sont considérées comme une API (ne se casseront pas avant la prochaine version principale) et est stockée au format 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 "
}Ensuite, les données indexées sont stockées dans la recherche Azure AI:
| Champ | Taper | Description |
|---|---|---|
chunck_number | Edm.Int32 | Numéro de morceau, de 0 à x |
content | Edm.String | Contenu de Chunck |
created_at | Edm.DateTimeOffset | Date de grattement de la source |
id | Edm.String | ID de Chunck |
title | Edm.String | Titre de la page source |
url | Edm.String | URL de la page source |
L'option de liste blanche permet de se limiter à un domaine et d'ignorer les sous-voies. Il s'agit d'une liste d'expressions régulières:
domain1,regexp1,regexp2 domain2,regexp3Pour des exemples:
À la liste blanche learn.microsoft.com :
learn.microsoft.com À la liste blanche learn.microsoft.com et go.microsoft.com , mais ignorez tous les sous-chemins sauf /en-us :
learn.microsoft.com, ^ /(?!en-us). * go.microsoft.com Pour configurer facilement la CLI, les variables d'environnement source à partir d'un fichier .env . Par exemple, pour l'option --azure-storage-access-key :
AZURE_STORAGE_ACCESS_KEY=xxx Pour les arguments qui acceptent plusieurs valeurs, utilisez une liste séparée par l'espace. Par exemple, pour l'option --whitelist :
WHITELIST=learn . microsoft . com go . microsoft . comLe répertoire du cache dépend du système d'exploitation:
~/.config/scrape-it-now (Unix)~/Library/Application Support/scrape-it-now (macOS)C:Users<user>AppDataRoamingscrape-it-now (Windows)Les binaires du navigateur sont automatiquement téléchargés ou mis à jour à chaque cycle. Le navigateur est du chrome et il n'est pas configurable (n'hésitez pas à ouvrir un problème si vous avez besoin d'un autre navigateur), il pèse environ 450 Mo. Le cache est stocké dans le répertoire de cache.
Le stockage du disque local est utilisé pour le blob et la file d'attente. Il n'est pas recommandé pour l'utilisation de la production, car il n'est pas facilement évolutif et non tolérant aux pannes. Il est utile pour les tests et le développement ou lorsque vous ne pouvez pas utiliser les services Azure.
Mise en œuvre:
Les procurations ne sont pas implémentées dans l'application. La sécurité du réseau ne peut pas être obtenue à partir du niveau de l'application. Utilisez un VPN (par exemple, votre, tiers) ou un service proxy (par exemple, Residential Procics, Tor) pour assurer l'anonymat et configurer le pare-feu système pour limiter l'accès du réseau d'application.
Comme l'application est emballée à PYPI, elle peut facilement être regroupée avec un conteneur. À chaque démarrage, l'application téléchargera les dépendances (navigateur, etc.) et les mettra en cache. Vous pouvez les télécharger avant la conduite en exécutant l' scrape-it-now scrape install .
Une bonne technique de performance serait également pour paralléliser les travaux de grattage et d'indexation en exécutant plusieurs conteneurs de chacun. Cela peut être réalisé avec Keda, en configurant un scaler de file d'attente.