Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen

Überblick

Ich bin ein Anfänger mit 2 Wochen Python-Erfahrung, aber ich möchte Google-Suchergebnisse für meine Seminarforschung erhalten, daher dieser Artikel "[Google-Suchergebnisse mit der benutzerdefinierten Such-API abrufen](https: // qiita) .com / zak_y / items / 42ca0f1ea14f7046108c # 1-api% E3% 82% AD% E3% 83% BC% E3% 81% AE% E5% 8F% 96% E5% BE% 97) ” ..

Obwohl es sich mit dem Referenzartikel überschneidet, möchte ich veröffentlichen, wie es gemacht wurde.

Umgebung Windows10 python3.7 Anaconda Navigator

** Ziel ** Erhaltene frühere Forschungen zum Thema Seminarforschung "Welche Determinanten beeinflussen die Zunahme und Abnahme der Zahl ausländischer Besucher in Japan?" → Erstellen Sie eine Datei, in der die Titel und URLs der erfassten Artikel aufgelistet sind

Verfahren

  1. Holen Sie sich den API-Schlüssel
  2. Aktivieren Sie die benutzerdefinierte Such-API
  3. Holen Sie sich eine benutzerdefinierte Suchmaschine
  4. Bibliotheksinstallation
  5. Holen Sie sich Google-Suchergebnisse mit API und speichern Sie sie als JSON-Datei 6.5 Speichern Sie die in 5 erhaltene Datei im Formatierungs- und Fernsehformat

1. Holen Sie sich den API-Schlüssel

Öffnen Sie das Navigationsmenü von Google Cloud Platform und klicken Sie auf "APIs und Dienste" → "Anmeldeinformationen". API認証.png

Erstellen Sie einen API-Schlüssel unter "Anmeldeinformationen erstellen". APIキー.png

Ich werde den erhaltenen API-Schlüssel später verwenden, also kopiere ihn und füge ihn irgendwo ein.

2. Aktivieren Sie die benutzerdefinierte Such-API

Öffnen Sie das Navigationsmenü von Google Cloud Platform und klicken Sie auf "APIs und Dienste" → "Bibliothek". APIメニュー.png

Wählen Sie "Benutzerdefinierte Such-API" unter "Andere" unten auf der Seite aus, um die Detailseite zu öffnen. Klicken Sie auf "Aktivieren". API とサービス - spreadsheet-test - Google Cloud Platform.png

3. Holen Sie sich eine benutzerdefinierte Suchmaschine

① Gehen Sie zur Seite Benutzerdefinierte Suchmaschine und klicken Sie auf "Hinzufügen".

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

② ・ Geben Sie die URL einer Site unter "Zu durchsuchende Site" ein (alles ist in Ordnung). ・ Stellen Sie die Sprache auf "Japanisch" ein ・ Geben Sie den Namen der Suchmaschine ein ・ Klicken Sie auf "Erstellen" カスタム検索エンジン設定.png

③ Wählen Sie den Namen der zuvor erstellten Suchmaschine aus den Optionen unter "Suchmaschine bearbeiten" und bearbeiten Sie ihn. カスタム検索エンジン設定2.png Was ist diese Seite? ・ Kopieren Sie die "Suchmaschinen-ID" und fügen Sie sie irgendwo ein, um sie zu speichern. ・ Wählen Sie Japanisch für "Sprache" -Löschen Sie die Site, die unter "Zu suchende Sites" angezeigt wird. ・ Aktivieren Sie "Das gesamte Web durchsuchen" ・ Klicken Sie auf "Aktualisieren"

4. Bibliotheksinstallation

Installieren Sie "Google API Python Client" unter "Google API Client Library für Python".

Die Bibliothek wird installiert, nachdem mit virtualenv eine virtuelle Umgebung erstellt wurde.

5. Holen Sie sich mit API und speichern Sie als JSON-Datei

Schreiben Sie nun den Code und führen Sie ihn aus ... dann tritt ein Fehler auf! image.png

** Ursache ** image.png Referenzartikel: Ursachen und Problemumgehungen für UnicodeEncodeError (cp932, Shift-JIS-Codierung) bei Verwendung von Python3 unter Windows

** Problemumgehung ** Geben Sie im Argument der Open-Funktion die Codierung für "utf-8" an.

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. Holen Sie es sich jetzt mit API und speichern Sie es als JSON-Datei

Mit ein wenig Optimierung sieht der endgültige Code folgendermaßen aus:

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

    #Speichern Sie die Antwort im JSON-Format
    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 = 'Ausländer besuchen Japan Faktor Forschung'

    getSearchResponse(target_keyword)

Wenn ich es dieses Mal ausführe, wird ein "Antwort" -Ordner unter dem "Daten" -Ordner erstellt, und eine JSON-Datei wird darunter erstellt! data_file.png

7.6 Speichern Sie die in 6 erhaltene Datei im Formatierungs- und Fernsehformat

Der Code ist unten.

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()


Bei der Ausführung wurde es in der Reihenfolge von Datum, Nummer, Site-URL, Titel, Artikel-URL und Details organisiert! result.png

Wenn Sie es in Excel öffnen, sieht es so aus ↓ result_excel.png

Impressionen

Der Artikel, auf den ich mich diesmal bezog ([Google-Suchergebnisse mit der benutzerdefinierten Such-API abrufen](https://qiita.com/zak_y/items/42ca0f1ea14f7046108c#1-api%E3%82%AD%E3%] 83% BC% E3% 81% AE% E5% 8F% 96% E5% BE% 97)) war so schön und leicht zu verstehen, dass selbst Anfänger es leicht implementieren konnten! Ich muss die Bedeutung des Codes verstehen, aber ich freue mich, ein Programm zu erstellen, das im Alltag verwendet werden kann: zufrieden: Es scheint jedoch, dass es verschiedene Einschränkungen für die benutzerdefinierte Such-API gibt, wenn es sich um einen freien Frame handelt (JSON-API für die benutzerdefinierte Google-Suche), sodass ich sie in Zukunft wieder verwenden werde Manchmal muss man vorsichtig sein.

Recommended Posts

Eine Geschichte über einen Python-Anfänger, der versucht, Google-Suchergebnisse mithilfe der API abzurufen
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Python-Skript, das von der Google-Suche zum sofortigen Speichern der Suchergebnisseite führt
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Eine Geschichte über den Versuch, mehrere Python-Versionen auszuführen (Mac Edition)
Geben Sie die Ergebnisse der Nachsuche mithilfe der Mattermost-API in eine Datei aus
Die Geschichte, den Versuch aufzugeben, mit Heroku eine Verbindung zu MySQL herzustellen
Eine Geschichte über einen Anfänger, der sich bemüht, CentOS 8 einzurichten (Verfahrensnotiz)
Konvertieren der cURL-API in ein Python-Skript (mithilfe des IBM Cloud-Objektspeichers)
[Python] Abrufen von Insight-Daten mithilfe der Google My Business-API
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Verwenden Sie die Such-API der National Parliament Library in Python
Eine Geschichte, die beim Versuch, die Python-Version mit GCE zu aktualisieren, hängen blieb
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
Ich habe versucht, Videos mit der Youtube Data API (Anfänger) zu suchen.
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Eine Geschichte über den Umgang mit dem CORS-Problem
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Führen Sie das Programm aus, ohne eine Python-Umgebung zu erstellen! !! (Erste Schritte mit Google Colaboratory)
Eine Geschichte, die es einfach macht, den Wohnbereich mit Elasticsearch und Python abzuschätzen
Eine Geschichte über einen Python-Anfänger, der von ModuleNotFoundError vernichtet werden sollte: Kein Modul namens 'Wewey'
[Hinweis] Eine Geschichte über den Versuch, eine Klassenmethode mit zwei Unterbalken in der Python 3-Serie zu überschreiben.
Erstellen Sie eine Anwendung, die nur mit der Google Custom Search-API mit Python 3.3.1 in Bottle sucht
Eine Geschichte über den Versuch, einen Chot zu automatisieren, wenn Sie selbst kochen
[Python] Klicken Sie auf die Google Übersetzungs-API
[Python3] Google übersetzt Google Übersetzung ohne Verwendung von API
So erhalten Sie die Python-Version
Die Geschichte der Verwendung von Python reduziert
[Python] Ich habe versucht, mithilfe der YouTube-Daten-API verschiedene Informationen abzurufen!
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
Python-Anfänger nutzen die inoffizielle API von Google Play Music, um Musik abzuspielen
Über den Fehler, den ich beim Versuch, Adafruit_DHT von Python auf Raspberry Pi zu verwenden, festgestellt habe
Eine Geschichte über den Versuch, den Testprozess eines 20 Jahre alten Systems in C zu verbessern
Eine Geschichte, in der ein Anfänger beim Versuch, eine Vim 8.2 + Python 3.8.2 + Lua-Plug-In-Umgebung unter Ubuntu 18.04.4 LTS zu erstellen, nicht weiterkommt
Eine Geschichte, die es aufgegeben hat, JavaScripthon unter Windows auszuführen.
Ich habe versucht, die Trefferergebnisse von Hachinai mithilfe der Bildverarbeitung zu erhalten
Eine Geschichte, die ich süchtig danach war, eine Video-URL mit Tweepy zu bekommen
Versuchen Sie es mit APSW, einer Python-Bibliothek, die SQLite ernst nehmen kann
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Eine Geschichte über einen Anfänger im Deep Learning, der versucht, Gitarren mit CNN zu klassifizieren
Codebeispiel zum Abrufen von oauth_token und oauth_token_secret der Twitter-API in Python 2.7
Ich erhalte einen UnicodeDecodeError, wenn ich versuche, mit Python sqlalchemy eine Verbindung zu Oracle herzustellen
So erhalten Sie mithilfe der API von Virus Total einen Beispielbericht aus einem Hashwert
POST-Fotos mit Microsoft Bing Image Search API, um Image Insights (Python) zu erhalten
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Die Geschichte des Versuchs, den Client wieder zu verbinden
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Tweet mit der Twitter-API in Python