Cet article est basé sur le contenu de la vidéo ci-dessous qui a été précédemment publiée sur YouTube.
Le contenu traité dans cet article est uniquement à des fins d'apprentissage. Dans certains cas, le grattage peut entraîner une charge sur le serveur de l'autre partie, veuillez donc le faire dans les limites du bon sens. </ font>
Tout d'abord, je vais coller le code réel écrit dans la vidéo ci-dessous.
!pip install gspread
J'avais l'habitude de taper explicitement gspread
pour l'installer, mais je n'en avais pas besoin ...
Même si je l'ai installé de cette façon, cela n'a pas de sens car c'était la même que la version installée à l'origine dans Colab.
Pour plus d'informations à ce sujet, reportez-vous à l'article suivant publié précédemment. https://qiita.com/safa/items/bfa52430f920ac562bec#gspread%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
from google.colab import auth
from oauth2client.client import GoogleCredentials
import gspread
auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())
Code d'accès aux feuilles de calcul Google sur «Google Colab». Au milieu de moi, c'est devenu "pas pareil".
Exécutez ce code et vous verrez l'URL. Si vous suivez les instructions à l'écran, l'authentification elle-même sera effectuée sans aucun problème. (C'est plus facile si vous vous connectez avec votre propre compte Google à l'avance)
Voici le code Python actuel. Veuillez saisir l'URL de la feuille de calcul Google dans laquelle vous souhaitez enregistrer.
from bs4 import BeautifulSoup
import requests
workbook_url = "URL de la feuille de calcul Google dans laquelle enregistrer"
workbook = gc.open_by_url(workbook_url)
mercari_url = "https://www.mercari.com"
fetch_path = "/jp/category/967/"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4222.0 Safari/537.36'}
# fetch_url: https://www.mercari.com/jp/category/967/
fetch_url = mercari_url + fetch_path
print("URL d'acquisition: " + fetch_url)
r = requests.get(fetch_url, headers=headers)
soup = BeautifulSoup(r.text, "lxml")
title = soup.find('title').get_text()
worksheet = workbook.add_worksheet(title=title, rows=100, cols=4)
item_list = soup.find_all("li", class_="sc-bwzfXH")
result_list = []
worksheet.append_row(["ID", "Titre", "prix", "URL détaillée", "image"])
for i, item in enumerate(item_list):
item_title = item.find("span").get_text()
item_price = item.find("div", class_="style_thumbnail__N_xAi").get_text()
item_url = mercari_url + item.find("a")["href"]
image = "=IMAGE(\"" + item.find("img")["src"] + "\")"
worksheet.append_row([i, item_title, item_price, item_url, image], value_input_option="USER_ENTERED")
print("Terminé!")
Si l'exécution réussit, les données seront écrites avec l'image affichée dans la feuille de calcul Google comme indiqué ci-dessous.
Je vais donner quelques explications supplémentaires sur le code que j'ai écrit.
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4222.0 Safari/537.36'}
・
・
・
r = requests.get(fetch_url, headers=headers)
La page Mercari semble renvoyer 403
pour un accès sans ʻUser-Agent. Dans les requêtes, il est possible de définir ʻUser-Agent
comme option dans le deuxième argument de get
, donc l'accès est effectué après avoir défini ceci.
Le contenu de ʻUser-Agent est celui de
Google Chrome Canary` lors de la création de la vidéo.
La valeur affichée dans l'onglet «Réseau» de «Devtools» est utilisée telle quelle.
soup = BeautifulSoup(r.text, "lxml")
Puisque lxml
est installé depuis le début sur Google Colab
, l'écriture d'un tel code ne provoque soudainement pas d'erreur.
Si vous voulez exécuter le même code localement, vous devez également avoir pip installé sur lxml
.
title = soup.find('title').get_text()
worksheet = workbook.add_worksheet(title=title, rows=100, cols=4)
Lorsque j'exécute un script Python, j'essaie de créer une feuille avec le titre de la page acquise comme nom de feuille. Dans la fonction ʻadd_worksheet`, la hauteur et la largeur de la feuille à créer sont spécifiées, mais il semble qu'elles soient ajoutées sans permission même si elles ne sont pas spécifiées. (Pour le moment, il est spécifié sur 100 lignes et 4 colonnes)
image = "=IMAGE(\"" + item.find("img")["src"] + "\")"
worksheet.append_row([i, item_title, item_price, item_url, image], value_input_option="USER_ENTERED")
Pour afficher une image dans une feuille de calcul Google, utilisez la fonction IMAGE fournie par la feuille de calcul Google.
IMAGE - Aide de l'éditeur de documents
En regardant la documentation, il semblait que certaines options étaient offertes, mais je ne les ai pas utilisées cette fois. Je voulais vraiment redimensionner la cellule pour l'adapter à l'image, mais malheureusement, cette fonctionnalité n'était pas fournie, alors je ne fais que transmettre l'URL de l'image.
Il n'y a pas de mode pour redimensionner les cellules en fonction de l'image.
Cité de la page d'aide ci-dessus (Je voulais utiliser cette fonctionnalité ...)
Même si la fonction ʻappend_rowde
gspread reçoit l'URL de l'image telle quelle, elle sera
'= IMAGEet sera interprétée comme une chaîne de caractères. Par conséquent,
value_input_option =" USER_ENTERED "` est spécifié comme option.
En spécifiant cela, le comportement sera le même que lorsque l'utilisateur tape le caractère à l'écran sur la feuille de calcul Google.
Dans ce cas, lorsque l'utilisateur tape la valeur = IMAGE (" ... ")
telle quelle, elle est interprétée de la même manière, de sorte que le côté feuille de calcul affiche l'image comme prévu.
■ Document de référence API Reference - gspread(append_row) ValueInputOption | Sheet API
C'est tout.
Je télécharge occasionnellement des vidéos liées à Python sur YouTube. Jetez un œil si vous le souhaitez!
Apprenez Python avec Colab de Safa
Recommended Posts