Pesquisa programática do google em Python usando a pesquisa personalizada

Tenho um fragmento de código usando o módulo pygoogle python que me permite procurar programaticamente por algum termo no google sucintamente:

 g = pygoogle(search_term)
 g.pages = 1
 results = g.get_urls()[0:10]
{[[2]} acabei de descobrir que isto foi descontinuado infelizmente e substituído por algo chamado Google custom search. Olhei para as outras perguntas relacionadas, mas não encontrei nada que pudesse usar. Tenho duas perguntas:

1) o google custom search permite-me fazer exactamente o que estou a fazer nas três linhas acima?

2) Se sim-onde posso encontrar um código de exemplo para fazer exatamente o que estou fazendo acima? Se não, então qual é a alternativa para fazer o que eu fiz usando pygoogle?

Author: user3079275, 2016-05-07

1 answers

É possível fazer isto. A armadilha é... não é muito simples, mas o resultado final é que você pode pesquisar toda a web a partir de python com poucas linhas de código.

Existem 3 etapas principais no total.

Primeiro passo: Obter a chave da API do Google

A página dopygoogle diz:

Infelizmente, o Google já não suporta a API de sabonetes para pesquisa, nem eles fornecem novas chaves de licença. Em poucas palavras, o Pigoogle é bonito. muito morto neste momento. ponto.

Podes usar a API AJAX deles. Veja aqui o código da amostra.: http://dcortesi.com/2008/05/28/google-ajax-search-api-example-python-code/

... mas também não podes usar a API AJAX. Você tem que obter uma chave da API do Google. https://developers.google.com/api-client-library/python/guide/aaa_apikeys para uso experimental simples, sugiro "chave do servidor".

2. º passo: configurar o motor de busca personalizado para que possa procurar no web inteira

De facto, a antiga API não está disponível. A melhor nova API que está disponível é a busca personalizada. Parece suportar apenas a pesquisa dentro de domínios específicos, no entanto, depois de seguir isto assim responde Você pode procurar em toda a web:

  1. da página web da Pesquisa Personalizada do Google ( http://www.google.com/cse/), carregue em criar um motor de busca personalizado.
  2. Escreva um nome e uma descrição para o seu motor de busca.
  3. Em Definição seu motor de busca, nos Sites para procurar caixa, Digite pelo menos um URL válido (por agora, basta colocar www.anyurl.com para obter depois deste ecrã. Mais sobre isso mais tarde ).
  4. seleccione a edição CSE que deseja e aceite os Termos de Serviço, e depois carregue em Seguinte. Seleccione a opção de disposição que deseja e depois carregue em Proximo.
  5. Carregue em qualquer uma das ligações sob a secção dos próximos passos para navegar até ao seu painel de controlo.
  6. no menu à esquerda, sob o painel de controlo, carregue no básico.
  7. na secção de preferências de pesquisa, seleccione a opção Procurar em toda a web, mas enfatize os locais incluídos.
  8. Carregue Em Gravar As Alterações.
  9. no menu à esquerda, sob o painel de Controlo, clique em Sites.
  10. apague o site que introduziu durante o processo de configuração inicial.

Esta abordagem também é recomendada pelo Google: https://support.google.com/customsearch/answer/2631040

3º Passo: Instalar o cliente da API do Google para o Python

pip install google-api-python-client, mais informações aqui:

4º passo (bónus): faz a Pesquisa

Então, depois de configurar isto, você pode seguir as amostras de código de poucos lugares:

E acabar com isto:

from googleapiclient.discovery import build
import pprint

my_api_key = "Google API key"
my_cse_id = "Custom Search Engine ID"

def google_search(search_term, api_key, cse_id, **kwargs):
    service = build("customsearch", "v1", developerKey=api_key)
    res = service.cse().list(q=search_term, cx=cse_id, **kwargs).execute()
    return res['items']

results = google_search(
    'stackoverflow site:en.wikipedia.org', my_api_key, my_cse_id, num=10)
for result in results:
    pprint.pprint(result)
Depois de alguns ajustes, podes escrever algumas funções que se comportam exactamente como o teu excerto, mas vou saltar este passo aqui.
 69
Author: mbdevpl, 2017-05-23 10:31:12