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
Ouvrez le menu de navigation de Google Cloud Platform et cliquez sur "API et services" → "Identifiants".
Créez une clé API à partir de "Create Credentials".
J'utiliserai la clé API obtenue plus tard, alors copiez-la et collez-la quelque part.
Ouvrez le menu de navigation de Google Cloud Platform et cliquez sur "API et services" → "Bibliothèque".
Sélectionnez "API de recherche personnalisée" dans "Autre" en bas de la page pour ouvrir la page de détails. Cliquez sur "Activer".
① Accédez à la page Moteur de recherche personnalisé et cliquez sur "Ajouter".
② ・ 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"
③ 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. 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"
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.
Maintenant, écrivez le code et exécutez-le ... puis une erreur se produit!
** Cause ** 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)
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!
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!
Si vous l'ouvrez dans Excel, cela ressemble à ceci ↓
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.