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
Öffnen Sie das Navigationsmenü von Google Cloud Platform und klicken Sie auf "APIs und Dienste" → "Anmeldeinformationen".
Erstellen Sie einen API-Schlüssel unter "Anmeldeinformationen erstellen".
Ich werde den erhaltenen API-Schlüssel später verwenden, also kopiere ihn und füge ihn irgendwo ein.
Öffnen Sie das Navigationsmenü von Google Cloud Platform und klicken Sie auf "APIs und Dienste" → "Bibliothek".
Wählen Sie "Benutzerdefinierte Such-API" unter "Andere" unten auf der Seite aus, um die Detailseite zu öffnen. Klicken Sie auf "Aktivieren".
① Gehen Sie zur Seite Benutzerdefinierte Suchmaschine und klicken Sie auf "Hinzufügen".
② ・ 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"
③ Wählen Sie den Namen der zuvor erstellten Suchmaschine aus den Optionen unter "Suchmaschine bearbeiten" und bearbeiten Sie ihn. 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"
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.
Schreiben Sie nun den Code und führen Sie ihn aus ... dann tritt ein Fehler auf!
** Ursache ** 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)
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!
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!
Wenn Sie es in Excel öffnen, sieht es so aus ↓
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