
Configure a compilação 1.0.15 do Apify Google Search Scraper substituindo integralmente as listas salvas de consultas e mecanismos do exemplo pela expressão de busca desejada e por `["bing"]`, usando este JSON de entrada: `{"queries": ["Python asyncio documentation"], "engines": ["bing"], "maxResultsPerExecutedQuery": 2, "country": "US", "language": "en", "safeSearch": true, "includeSponsoredResults": false}`. Observe que a compilação pública 1.0.15 oferece suporte a vários mecanismos, mas apenas o Bing foi aceito neste teste; os fluxos do Google, Brave e DuckDuckGo estão suspensos ou excluídos. As contagens do resumo de execução em OUTPUT do teste de controle informam: `queriesRequested`: 1, `searchesCompiled`: 1, `executionsPlanned`: 1, `enginesSuccessful`: 1, `enginesFailed`: 0, `pagesAttempted`: 1, `pagesParsed`: 1, `resultsSaved`: 2, `engineStatusCounts`: {"bing": {"ok": 1}}, `engineResultCounts`: {"bing": 2}, `queryResultCounts`: {"Python asyncio documentation": 2}, `stopReason`: "result_caps_reached". Essas contagens do resumo de execução representam os totais de execução do coletor, não as linhas por destino. Isso confirmou o suporte a URLs, posições e proveniência do Bing dentro desse escopo limitado, sem validar os outros mecanismos não aceitos, outros mercados ou a obtenção do conteúdo dos destinos.
1. Defina suas regras de coleta
- Defina suas regras de coleta substituindo integralmente as listas salvas de consultas e mecanismos por 1 expressão de busca desejada e por `["bing"]`, `maxResultsPerExecutedQuery: 2`, país Estados Unidos, idioma inglês, `safeSearch: true` e `includeSponsoredResults: false`. Não se prescreve nenhum parâmetro público de entrada para limitar páginas.
- Salve as linhas brutas de resultados do Bing e os metadados de OUTPUT. Os campos nativos das linhas incluem `runId`, `country`, `language`, `safeSearch`, `engine`, `executedQuery`, `page`, `rankOnPage`, `rank`, `title`, `canonicalUrl`, `resultDomain`, `snippet`, `isSponsored`, `advertiserDomain`, `observedAt` e `schemaVersion`. Mantenha a identificação completa da execução e das configurações.
- Crie uma chave de observação usando `runId` + `engine` + `executedQuery` + `page` + `rankOnPage`. Mantenha a posição e observedAt como evidências. Remova da tabela de trabalho as linhas exportadas que sejam duplicatas exatas e registre essa duplicação. Se uma chave repetida tiver valores de URL conflitantes, mantenha ambos os candidatos pendentes para revisão da fonte, em vez de escolher sem registrar a decisão ou confiar na maioria.
- Crie uma chave de destino a partir do `canonicalUrl` retornado, que é um endereço candidato normalizado, não uma prova de endereço canônico HTML nem o href original. Comece pelas strings exatas das URLs retornadas. Se normalizar maiúsculas e minúsculas do host, fragmentos ou parâmetros de rastreamento, registre por que o destino continua sendo o mesmo. Caminhos ou parâmetros de consulta diferentes permanecem separados.
- Vincule as observações à tabela de destinos por meio de uma coluna de chave de destino. A mesma URL encontrada por 2 consultas ou em 2 momentos tem várias observações e 1 destino revisado. A associação a uma consulta se baseia apenas em observações reais.
- Exporte as tabelas de trabalho com segurança. Preserve aspas, vírgulas, quebras de linha e caracteres Unicode das consultas. Use JSON ou JSONL bruto como referência principal, pois exportadores ou importadores de CSV podem eliminar a distinção entre valores nulos e vazios. Antes de combinar grandes exportações, use um pequeno caso de teste para verificar se os valores permanecem exatamente iguais após a exportação e a reimportação.
- Informe contagens separadas para linhas brutas, linhas exportadas duplicadas, observações válidas distintas, conflitos e chaves de destino distintas. URLs únicas ou associações a consultas não estimam o volume total de buscas nem o conjunto de todos os sites. Mantenha as buscas que falharam, ficaram vazias ou atingiram o limite no registro de coleta.
- Encaminhe os endereços de destino e as referências das observações para uma verificação separada dos destinos. Combinar recursos não comprova o acesso às páginas, a relevância ou a confiabilidade da fonte. Deixe explícito que o escopo se limita ao Bing.
Registro fictício de combinação e verificação de dados
*Nota: As tabelas e os registros a seguir são fictícios e originais, usados para ensino.*
Imagine um teste em que a execução R1 com a consulta "AI agents" retorna U1 na posição 1 e U2 na posição 2. A execução R1 com a consulta "small business automation" retorna U2 na posição 1 e U3 na posição 2. A execução R2 com a consulta "AI agents" retorna U1 na posição 1 e U4 na posição 2. Todos são resultados do Bing com as mesmas configurações declaradas e seus respectivos horários. As 6 chaves de observação correspondem a 4 chaves de destino: U1, U2, U3 e U4. U1 tem 2 observações em momentos diferentes; U2 tem 2 observações de consultas diferentes. Nenhuma dessas repetições é uma linha exportada duplicada.
Uma 7ª linha bruta repete exatamente R1 / consulta "AI agents" / página 1 / posição 2 U2, copiando cada valor bruto original sem alterações como uma linha exportada duplicada. Uma 8ª linha com essa mesma chave tem U9. A chave R1+bing+AI agents+1+2 apresenta conflito TANTO para U2 QUANTO para U9; mantenha os 2 valores candidatos no registro de conflitos, em vez de confiar no primeiro ou na maioria. São preservadas 8 linhas brutas, 1 linha exportada duplicada, 6 chaves de observação, 1 chave com conflito, 5 observações sem conflito e 4 destinos aceitos. U9 permanece fora dos destinos aceitos.
*Tabela fictícia original com 8 linhas brutas.*
| RowId | RunId | Engine | ExecutedQuery | Page | RankOnPage | CanonicalUrl | ObservedAt |
|---|---|---|---|---|---|---|---|
| 1 | R1 | bing | AI agents | 1 | 1 | U1 | 2026-10-13T06:20:15Z |
| 2 | R1 | bing | AI agents | 1 | 2 | U2 | 2026-10-13T06:20:15Z |
| 3 | R1 | bing | small business automation | 1 | 1 | U2 | 2026-10-13T06:21:00Z |
| 4 | R1 | bing | small business automation | 1 | 2 | U3 | 2026-10-13T06:21:00Z |
| 5 | R2 | bing | AI agents | 1 | 1 | U1 | 2026-10-13T07:00:15Z |
| 6 | R2 | bing | AI agents | 1 | 2 | U4 | 2026-10-13T07:00:15Z |
| 7 | R1 | bing | AI agents | 1 | 2 | U2 | 2026-10-13T06:20:15Z |
| 8 | R1 | bing | AI agents | 1 | 2 | U9 | 2026-10-13T06:20:15Z |
*Tabela fictícia original com o estado de 6 chaves.*
| ObservationKey | CandidateCanonicalUrl | Situação / Estado |
|---|---|---|
| R1+bing+AI agents+1+1 | U1 | Sem conflito |
| R1+bing+AI agents+1+2 | U2, U9 | Pendente por conflito (ambos os candidatos mantidos pendentes; a linha 7 registra a duplicação na exportação) |
| R1+bing+small business automation+1+1 | U2 | Sem conflito |
| R1+bing+small business automation+1+2 | U3 | Sem conflito |
| R2+bing+AI agents+1+1 | U1 | Sem conflito |
| R2+bing+AI agents+1+2 | U4 | Sem conflito |
*Tabela fictícia original de referência dos destinos (4 destinos aceitos).*
| TargetKey | Referências de observações sem conflito | Situação |
|---|---|---|
| U1 | R1 AI agents posição 1, R2 AI agents posição 1 | Sem conflito |
| U2 | R1 small business automation posição 1 | Sem conflito (conflito de R1 AI agents posição 2 mantido pendente) |
| U3 | R1 small business automation posição 2 | Sem conflito |
| U4 | R2 AI agents posição 2 | Sem conflito |
*Caso de teste CSV fictício original com quebra de linha interna, aspas duplicadas, café em Unicode e consulta com vírgula:*
Trecho de código
runId,engine,executedQuery,page,rankOnPage,title,canonicalUrl
"R1","bing","garden, tray",1,1,"Café guide
""Best picks""","https://example.com/garden"*Valores decodificados do caso de teste e verificação pelo leitor:* O campo de consulta é decodificado como `garden, tray`; o campo de título é decodificado como `Café guide`, seguido de uma quebra de linha real e 1 par de aspas em torno de `Best picks`; e canonicalUrl é decodificado como a string simples `https://example.com/garden` sem sintaxe Markdown. Uma verificação pelo leitor de exportação e reimportação confirma que a separação por vírgulas, as quebras de linha internas, os pares únicos de aspas e os caracteres Unicode são preservados corretamente. Qualquer afirmação de que uma operação de análise, gravação ou leitura em Python foi concluída se aplica apenas a esse único caso de teste fictício, nunca a uma exportação de Actor ou a um grande conjunto de dados.
Fontes e leituras adicionais
Por Chronometrica · Atualizado
Voltar ao topo ↑
