O raspador da web fez a IA e a simplicidade em mente. Ele é executado como uma CLI que pode ser paralela e produzir conteúdo de marcação de alta qualidade.
Compartilhado:
Raspador:
Indexador:
# Install the package
python3 -m pip install scrape-it-now
# Run the CLI
scrape-it-now --help Para configurar a CLI (incluindo autenticação aos serviços de back -end), use variáveis de ambiente, um arquivo .env ou opções de linha de comando.
O aplicativo deve ser executado com o Python 3.13 ou posterior. Se esta versão não estiver instalada, uma maneira fácil de instalá -la é 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 com armazenamento do Azure Blob e Armazenamento da fila do 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 com blob de disco local e fila 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.comExemplo:
❯ 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
...As opções mais frequentes são:
Options | Descrição | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Chave de acesso de armazenamento do Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nome da conta do Azure Storage | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Provedor de blob | BLOB_PROVIDER |
--job-name-jn | Nome do trabalho | JOB_NAME |
--max-depth-md | Profundidade máxima | MAX_DEPTH |
--queue-provider-qp | Provedor de filas | QUEUE_PROVIDER |
--save-images-si | Salvar imagens | SAVE_IMAGES |
--save-screenshot-ss | Salve a captura de tela | SAVE_SCREENSHOT |
--whitelist-w | Lista de permissões | WHITELIST |
Para documentação sobre todas as opções disponíveis, execute:
scrape-it-now scrape run --helpUso com armazenamento do Azure Blob:
# Azure Storage configuration
export AZURE_STORAGE_CONNECTION_STRING=xxx
# Show the job status
scrape-it-now scrape status [job_name]Uso com blob de disco local:
# Local disk configuration
export BLOB_PROVIDER=local_disk
# Show the job status
scrape-it-now scrape status [job_name]Exemplo:
❯ 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}As opções mais frequentes são:
Options | Descrição | Environment variable |
|---|---|---|
--azure-storage-access-key-asak | Chave de acesso de armazenamento do Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nome da conta do Azure Storage | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Provedor de blob | BLOB_PROVIDER |
Para documentação sobre todas as opções disponíveis, execute:
scrape-it-now scrape status --helpUso com armazenamento do Azure Blob, armazenamento da fila do Azure e pesquisa de IA do 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 com blob de disco local, fila de disco local e pesquisa de IA do 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]Exemplo:
❯ 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
...As opções mais frequentes são:
Options | Descrição | Environment variable |
|---|---|---|
--azure-openai-api-key-aoak | Chave API do Azure OpenAi | AZURE_OPENAI_API_KEY |
--azure-openai-embedding-deployment-name-aoedn | Nome de implantação de incorporação do Azure Openai | AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME |
--azure-openai-embedding-dimensions-aoed | Dimensões de incorporação do Azure Openai | AZURE_OPENAI_EMBEDDING_DIMENSIONS |
--azure-openai-embedding-model-name-aoemn | Nome do modelo de incorporação do Azure Openai | AZURE_OPENAI_EMBEDDING_MODEL_NAME |
--azure-openai-endpoint-aoe | Ponto de extremidade do Azure OpenAi | AZURE_OPENAI_ENDPOINT |
--azure-search-api-key-asak | Chave da API de pesquisa do Azure | AZURE_SEARCH_API_KEY |
--azure-search-endpoint-ase | Azure Search Endpoint | AZURE_SEARCH_ENDPOINT |
--azure-storage-access-key-asak | Chave de acesso de armazenamento do Azure | AZURE_STORAGE_ACCESS_KEY |
--azure-storage-account-name-asan | Nome da conta do Azure Storage | AZURE_STORAGE_ACCOUNT_NAME |
--blob-provider-bp | Provedor de blob | BLOB_PROVIDER |
--queue-provider-qp | Provedor de filas | QUEUE_PROVIDER |
Para documentação sobre todas as opções disponíveis, execute:
scrape-it-now index run --help ----
Título: Processo de raspagem com armazenamento do Azure
----
Gráfico LR
CLI ["CLI"]
Web ["Site"]
SUBGRAFIO "AZULE FILUE Storage"
to_chunk ["to chunk"]
to_scrape ["para raspar"]
fim
SUBGRAPH "AZULE BLOB Storage"
SUBRAPHO "RECIBILIDADE"
Jó ["Job"]
raspado ["raspado"]
estado ["estado"]
fim
fim
CLI -(1) Mensagem de puxar -> to_scrape
CLI -(2) Obtenha cache -> raspado
CLI -(3) navegar -> web
CLI -(4) Cache de atualização -> raspado
CLI -(5) Push State -> Estado
CLI -(6) Adicionar mensagem -> TO_SCRAPE
CLI -(7) Adicionar mensagem -> TO_CHUNK
CLI -(8) Estado de atualização -> Job
----
Título: Processo de raspagem com armazenamento do Azure e pesquisa de IA do Azure
----
Gráfico LR
Pesquise ["Azure AI Search"]
CLI ["CLI"]
incorporação ["Azure OpenAi incorpingdings"]
SUBGRAFIO "AZULE FILUE Storage"
to_chunk ["to chunk"]
fim
SUBGRAPH "AZULE BLOB Storage"
SUBRAPHO "RECIBILIDADE"
raspado ["raspado"]
fim
fim
CLI -(1) Pull Message -> To_Chunk
CLI -(2) Obtenha cache -> raspado
CLI -(3) Chunk -> CLI
CLI -(4) incorporação -> incorporação
CLI -(5) Push para pesquisar -> Pesquisar
O armazenamento de blob está organizado em pastas:
[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)Os dados da página são considerados como uma API (não quebrarão até a próxima versão principal) e são armazenados no 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 "
}Em seguida, os dados indexados são armazenados no Azure AI Search:
| Campo | Tipo | Descrição |
|---|---|---|
chunck_number | Edm.Int32 | Número de pedaços, de 0 a x |
content | Edm.String | Conteúdo de chunck |
created_at | Edm.DateTimeOffset | Data de raspagem de origem |
id | Edm.String | ID do chunck |
title | Edm.String | Título da página de origem |
url | Edm.String | URL da página de origem |
A opção da lista de permissões permite restringir a um domínio e ignorar os sub -caminhos. É uma lista de expressões regulares:
domain1,regexp1,regexp2 domain2,regexp3Para exemplos:
Para Whitelist learn.microsoft.com :
learn.microsoft.com Para Whitelist learn.microsoft.com e go.microsoft.com , mas ignore todos os sub-caminhos, exceto /en-us :
learn.microsoft.com, ^ /(?!en-us). * go.microsoft.com Para configurar facilmente a CLI, as variáveis de ambiente de origem de um arquivo .env . Por exemplo, para a opção --azure-storage-access-key :
AZURE_STORAGE_ACCESS_KEY=xxx Para argumentos que aceitam vários valores, use uma lista separada por espaço. Por exemplo, para a opção --whitelist :
WHITELIST=learn . microsoft . com go . microsoft . comO Cache Directoty depende do sistema operacional:
~/.config/scrape-it-now (unix)~/Library/Application Support/scrape-it-now (macOS)C:Users<user>AppDataRoamingscrape-it-now (Windows)Os binários do navegador são baixados ou atualizados automaticamente em cada execução. O navegador é cromo e não é configurável (fique à vontade para abrir um problema se precisar de outro navegador), ele pesa cerca de 450 MB. O cache é armazenado no diretório de cache.
O armazenamento de disco local é usado para blob e fila. Não é recomendado para o uso da produção, pois não é facilmente escalável e não tolerante a falhas. É útil para testes e desenvolvimento ou quando você não pode usar os serviços do Azure.
Implementação:
Os proxies não são implementados no aplicativo. A segurança da rede não pode ser alcançada a partir do nível de aplicativo. Use uma VPN (por exemplo, seu serviço de terceiros) ou um proxy (por exemplo, procias residenciais, Tor) para garantir o anonimato e configurar o firewall do sistema para limitar o acesso à rede de aplicativos.
Como o aplicativo é empacotado para o PYPI, ele pode ser facilmente agrupado com um contêiner. Em todas as partidas, o aplicativo baixará as dependências (navegador, etc.) e cache -as. Você pode preencher-os pré-baixar executando o comando scrape-it-now scrape install .
Uma boa técnica para o desempenho também paralalizaria os trabalhos de raspagem e indexação, executando vários contêineres de cada um. Isso pode ser alcançado com o KEDA, configurando um scaler da fila.