Vários cartões de resultados de busca se conectam a um índice separado de páginas.
Mantenha as observações de busca ao combinar os endereços das páginas.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.*

Registro fictício de combinação e verificação de dados
RowIdRunIdEngineExecutedQueryPageRankOnPageCanonicalUrlObservedAt
1R1bingAI agents11U12026-10-13T06:20:15Z
2R1bingAI agents12U22026-10-13T06:20:15Z
3R1bingsmall business automation11U22026-10-13T06:21:00Z
4R1bingsmall business automation12U32026-10-13T06:21:00Z
5R2bingAI agents11U12026-10-13T07:00:15Z
6R2bingAI agents12U42026-10-13T07:00:15Z
7R1bingAI agents12U22026-10-13T06:20:15Z
8R1bingAI agents12U92026-10-13T06:20:15Z

*Tabela fictícia original com o estado de 6 chaves.*

Registro fictício de combinação e verificação de dados
ObservationKeyCandidateCanonicalUrlSituação / Estado
R1+bing+AI agents+1+1U1Sem conflito
R1+bing+AI agents+1+2U2, U9Pendente por conflito (ambos os candidatos mantidos pendentes; a linha 7 registra a duplicação na exportação)
R1+bing+small business automation+1+1U2Sem conflito
R1+bing+small business automation+1+2U3Sem conflito
R2+bing+AI agents+1+1U1Sem conflito
R2+bing+AI agents+1+2U4Sem conflito

*Tabela fictícia original de referência dos destinos (4 destinos aceitos).*

Registro fictício de combinação e verificação de dados
TargetKeyReferências de observações sem conflitoSituação
U1R1 AI agents posição 1, R2 AI agents posição 1Sem conflito
U2R1 small business automation posição 1Sem conflito (conflito de R1 AI agents posição 2 mantido pendente)
U3R1 small business automation posição 2Sem conflito
U4R2 AI agents posição 2Sem 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

text
runId,engine,executedQuery,page,rankOnPage,title,canonicalUrl
"R1","bing","garden, tray",1,1,"Café guide
""Best picks""","https://example.com/garden"
Registro fictício de combinação e verificação de dados

*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 ↑