Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API

Aperçu

Je suis un débutant avec 2 semaines d'expérience Python, mais je souhaite obtenir les résultats de recherche Google pour ma recherche de séminaire, donc cet article "[Obtenir les résultats de recherche Google à l'aide de l'API de recherche personnalisée](https: // qiita) .com / zak_y / items / 42ca0f1ea14f7046108c # 1-api% E3% 82% AD% E3% 83% BC% E3% 81% AE% E5% 8F% 96% E5% BE% 97) " ..

Bien qu'il chevauche l'article de référence, j'aimerais publier comment il a été fait.

environnement Windows10 python3.7 Anaconda Navigator

** Cible ** Obtention de recherches antérieures sur le thème de recherche du séminaire "Quels sont les déterminants qui influencent l'augmentation et la diminution du nombre de visiteurs étrangers au Japon?" → Créez un fichier qui répertorie les titres et les URL des articles acquis

procédure

  1. Obtenez la clé API
  2. Activez l'API de recherche personnalisée
  3. Obtenez un moteur de recherche personnalisé
  4. Installation de la bibliothèque
  5. Obtenez les résultats de la recherche Google avec l'API et enregistrez-les en tant que fichier json 6.5 Enregistrer le fichier obtenu en 5 au format formatage & tvs

1. Obtenez la clé API

Ouvrez le menu de navigation de Google Cloud Platform et cliquez sur "API et services" → "Identifiants". API認証.png

Créez une clé API à partir de "Create Credentials". APIキー.png

J'utiliserai la clé API obtenue plus tard, alors copiez-la et collez-la quelque part.

2. Activez l'API de recherche personnalisée

Ouvrez le menu de navigation de Google Cloud Platform et cliquez sur "API et services" → "Bibliothèque". APIメニュー.png

Sélectionnez "API de recherche personnalisée" dans "Autre" en bas de la page pour ouvrir la page de détails. Cliquez sur "Activer". API とサービス - spreadsheet-test - Google Cloud Platform.png

3. Obtenez un moteur de recherche personnalisé

① Accédez à la page Moteur de recherche personnalisé et cliquez sur "Ajouter".

カスタム検索 - 検索エンジンの編集.png

② ・ Entrez l'URL de certains sites sous "Site à rechercher" (tout va bien) ・ Réglez la langue sur "Japonais" ・ Entrez le nom du moteur de recherche ・ Cliquez sur "Créer" カスタム検索エンジン設定.png

③ Sélectionnez le nom du moteur de recherche que vous avez créé précédemment dans les options sous "Modifier le moteur de recherche" et modifiez-le. カスタム検索エンジン設定2.png Quelle est cette page ・ Copiez le "Search Engine ID" et collez-le quelque part pour le sauvegarder. ・ Sélectionnez le japonais pour "Langue" -Supprimer le site affiché dans "Sites à rechercher" ・ Activez "Rechercher sur tout le Web" ・ Cliquez sur "Mettre à jour"

4. Installation de la bibliothèque

Installez «Google API Python Client» en vous reportant à «Google API Client Library for Python».

La bibliothèque est installée après la création d'un environnement virtuel avec virtualenv.

5. Obtenez avec l'API et enregistrez en tant que fichier json

Maintenant, écrivez le code et exécutez-le ... puis une erreur se produit! image.png

** Cause ** image.png Article de référence: Causes et solutions de contournement pour UnicodeEncodeError (cp932, encodage Shift-JIS) lors de l'utilisation de Python3 sous Windows

** Solution de contournement ** Spécifiez le codage ʻutf-8` dans l'argument de la fonction Open.

scrape.py


with open(os.path.join(save_response_dir, 'response_' + today + '.json'), mode='w', encoding='utf-8') as response_file:
        response_file.write(jsonstr)

6. Maintenant, obtenez-le avec l'API et enregistrez-le en tant que fichier json

Avec quelques ajustements, le code final ressemble à ceci:

scrape.py


import os
import datetime
import json

from time import sleep
from googleapiclient.discovery import build
                  
GOOGLE_API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
CUSTOM_SEARCH_ENGINE_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

DATA_DIR = 'data'


def makeDir(path):
    if not os.path.isdir(path):
        os.mkdir(path)


def getSearchResponse(keyword):
    today = datetime.datetime.today().strftime("%Y%m%d")
    timestamp = datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S")

    makeDir(DATA_DIR)

    service = build("customsearch", "v1", developerKey=GOOGLE_API_KEY)

    page_limit = 10
    start_index = 1
    response = []
    for n_page in range(0, page_limit):
        try:
            sleep(1)
            response.append(service.cse().list(
                q=keyword,
                cx=CUSTOM_SEARCH_ENGINE_ID,
                lr='lang_ja',
                num=10,
                start=start_index
            ).execute())
            start_index = response[n_page].get("queries").get("nextPage")[
                0].get("startIndex")
        except Exception as e:
            print(e)
            break

    #Enregistrer la réponse au format json
    save_response_dir = os.path.join(DATA_DIR, 'response')
    makeDir(save_response_dir)
    out = {'snapshot_ymd': today, 'snapshot_timestamp': timestamp, 'response': []}
    out['response'] = response
    jsonstr = json.dumps(out, ensure_ascii=False)
    with open(os.path.join(save_response_dir, 'response_' + today + '.json'), mode='w', encoding='utf-8') as response_file:
        response_file.write(jsonstr)


if __name__ == '__main__':

    target_keyword = 'Étranger visitant la recherche sur les facteurs au Japon'

    getSearchResponse(target_keyword)

Quand je l'exécute cette fois, un dossier "response" est créé sous le dossier "data", et un fichier json est créé sous celui-ci! data_file.png

7.6 Enregistrer le fichier obtenu en 6 au format formatage et téléviseurs

Le code est ci-dessous.

prettier.py


import os
import datetime
import json
import pandas as pd

DATA_DIR = 'data'


def makeDir(path):
    if not os.path.isdir(path):
        os.mkdir(path)


def makeSearchResults():
    today = datetime.datetime.today().strftime("%Y%m%d")

    response_filename = os.path.join(
        DATA_DIR, 'response', 'response_' + today + '.json')
    response_file = open(response_filename, 'r', encoding='utf-8')
    response_json = response_file.read()
    response_tmp = json.loads(response_json)
    ymd = response_tmp['snapshot_ymd']
    response = response_tmp['response']
    results = []
    cnt = 0
    for one_res in range(len(response)):
        if 'items' in response[one_res] and len(response[one_res]['items']) > 0:
            for i in range(len(response[one_res]['items'])):
                cnt += 1
                display_link = response[one_res]['items'][i]['displayLink']
                title = response[one_res]['items'][i]['title']
                link = response[one_res]['items'][i]['link']
                snippet = response[one_res]['items'][i]['snippet'].replace(
                    '\n', '')
                results.append({'ymd': ymd, 'no': cnt, 'display_link': display_link,
                                'title': title, 'link': link, 'snippet': snippet})
    save_results_dir = os.path.join(DATA_DIR, 'results')
    makeDir(save_results_dir)
    df_results = pd.DataFrame(results)
    df_results.to_csv(os.path.join(save_results_dir, 'results_' + ymd + '.tsv'), sep='\t',
                      index=False, columns=['ymd', 'no', 'display_link', 'title', 'link', 'snippet'])


if __name__ == '__main__':

    makeSearchResults()


Une fois exécuté, il était organisé dans l'ordre de la date, du numéro, de l'URL du site, du titre, de l'URL de l'article et des détails! result.png

Si vous l'ouvrez dans Excel, cela ressemble à ceci ↓ result_excel.png

Impressions

L'article auquel j'ai fait référence cette fois ([Obtenir les résultats de recherche Google à l'aide de l'API de recherche personnalisée](https://qiita.com/zak_y/items/42ca0f1ea14f7046108c#1-api%E3%82%AD%E3%] 83% BC% E3% 81% AE% E5% 8F% 96% E5% BE% 97)) était si agréable et facile à comprendre que même les débutants pouvaient facilement l'implémenter! Je dois bien comprendre le sens du code, mais je suis heureux de créer un programme qui peut être utilisé dans la vie quotidienne pour le moment: satisfait: Cependant, il semble qu'il existe diverses restrictions sur l'API de recherche personnalisée s'il s'agit d'un cadre gratuit (API JSON Google Custom Search), je l'utiliserai donc à nouveau à l'avenir Il faut parfois faire attention.

Recommended Posts

Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
Une histoire sur la tentative d'implémentation de variables privées en Python.
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics
Script Python qui va de la recherche Google à l'enregistrement de la page de résultats de recherche à la fois
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Une histoire sur la tentative d'exécuter plusieurs versions de Python (édition Mac)
Exporter les résultats de la recherche de publication dans un fichier à l'aide de l'API Mattermost
L'histoire de l'abandon d'essayer de se connecter à MySQL en utilisant Heroku
Une histoire sur un débutant essayant de configurer CentOS 8 (mémo de procédure)
Convertir l'API cURL en script Python (à l'aide du stockage d'objets IBM Cloud)
[Python] Obtenez des données insight à l'aide de l'API Google My Business
Une histoire d'essayer un monorepo (Golang +) Python avec Bazel
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Une histoire bloquée lors de la tentative de mise à niveau de la version Python avec GCE
Une note sur l'utilisation de l'API Facebook avec le SDK Python
J'ai essayé de rechercher des vidéos à l'aide de l'API de données Youtube (débutant)
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Une histoire sur la façon de traiter le problème CORS
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Une histoire à propos d'un débutant en python coincé avec aucun module nommé'ttp.server '
Exécutez le programme sans créer d'environnement Python! !! (Comment démarrer avec Google Colaboratory)
Une histoire qui facilite l'estimation de la surface habitable à l'aide d'Elasticsearch et de Python
Une histoire à propos d'un débutant en Python qui était sur le point d'être écrasé par ModuleNotFoundError: Aucun module nommé 'weepy'
[Note] Une histoire sur la tentative de remplacer une méthode de classe avec deux barres inférieures dans la série Python 3.
Créez une application qui recherche uniquement à l'aide de l'API de recherche personnalisée Google avec Python 3.3.1 dans Bottle
Une histoire d'essayer d'automatiser un chot lorsque vous cuisinez vous-même
[Python] Accédez à l'API Google Translation
[Python3] Google translate google translation sans utiliser l'API
Comment obtenir la version Python
L'histoire de l'utilisation de la réduction de Python
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
Comment envoyer une requête à l'API DMM (FANZA) avec python
Les débutants en Python utilisent l'API non officielle de Google Play Music pour jouer de la musique
À propos de l'erreur que j'ai rencontrée en essayant d'utiliser Adafruit_DHT à partir de Python sur Raspberry Pi
Une histoire d'essayer d'améliorer le processus de test d'un système vieux de 20 ans écrit en C
Une histoire où un débutant est coincé en essayant de créer un environnement de plug-in vim 8.2 + python 3.8.2 + lua sur Ubuntu 18.04.4 LTS
Une histoire d'essayer d'exécuter JavaScripthon sur Windows et d'abandonner.
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
Une histoire à laquelle j'étais accro à essayer d'obtenir une URL de vidéo avec tweepy
Essayez d'utiliser APSW, une bibliothèque Python que SQLite peut prendre au sérieux
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
L'histoire d'un débutant en apprentissage profond essayant de classer les guitares avec CNN
Exemple de code pour obtenir oauth_token et oauth_token_secret de l'API Twitter en Python 2.7
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
Comment obtenir un exemple de rapport à partir d'une valeur de hachage à l'aide de l'API de Virus Total
POSTER des photos avec l'API Microsoft Bing Image Search pour obtenir des informations sur les images (Python)
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
L'histoire d'essayer de reconnecter le client
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Tweet à l'aide de l'API Twitter en Python