[Python] Enregistrez le résultat du scraping Web de la page produit Mercari sur Google Colab dans une feuille de calcul Google et affichez également l'image du produit.

Cet article est basé sur le contenu de la vidéo ci-dessous qui a été précédemment publiée sur YouTube.

[Learning Python] Enregistrez le résultat du scraping Web de la page produit Mercari dans une feuille de calcul Google et affichez l'image du produit

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>

Code Python à exécuter sur Google Colab

Tout d'abord, je vais coller le code réel écrit dans la vidéo ci-dessous.

Installer gspread

!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

Un sort pour rendre les feuilles de calcul Google accessibles depuis Colab

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)

Code pour enregistrer le résultat du web scraping de la page produit Mercari dans une feuille de calcul Google et afficher l'image du produit

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.

実際にWebスクレイピングを実行した結果のGoogleスプレッドシート

Explication supplémentaire du code

Je vais donner quelques explications supplémentaires sur le code que j'ai écrit.

Accorder un agent utilisateur

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.

À propos de lxml

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.

À propos du titre de la feuille

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)

Afficher des images à l'aide de la fonction IMAGE de Google Spreadsheet

  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_rowdegspread 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

Enfin (publicité)

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

[Python] Enregistrez le résultat du scraping Web de la page produit Mercari sur Google Colab dans une feuille de calcul Google et affichez également l'image du produit.
Enregistrer des images sur le Web sur un lecteur avec Python (Colab)
Exécuter une commande sur le serveur Web et afficher le résultat
Affichez l'image de la caméra connectée à l'ordinateur personnel sur l'interface graphique.
Convertissez le résultat de python optparse en dict et utilisez-le
L'histoire de la création d'un outil pour charger une image avec Python ⇒ l'enregistrer sous un autre nom
[Python] Comment spécifier la position d'affichage de la fenêtre et la taille de matplotlib
[Android] Afficher des images sur le Web dans la fenêtre info de Google Map
[python] Envoyez l'image capturée de la caméra Web au serveur et enregistrez-la
GAE --Avec Python, faites pivoter l'image en fonction des informations de rotation d'EXIF et importez-la dans Cloud Storage.
Obtenez la taille d'un fichier image sur le Web (Python3, aucune bibliothèque supplémentaire requise)
Jouons avec Python Receive et enregistrez / affichez le texte du formulaire de saisie
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
[Python] [Windows] Enregistrer une capture d'écran sous forme d'image
Python Open CV a essayé d'afficher l'image sous forme de texte.
Appelez l'API Hatena Blog depuis Python et enregistrez vos articles de blog individuellement sur votre PC
Exécutez le modèle Caffe sur Google Colaboratory pour prédire l'âge et le sexe des mannequins du monde
POSTEZ l'image sélectionnée sur le site Web avec multipart / form-data et enregistrez-la sur Amazon S3! !!
[Super facile! ] Comment afficher le contenu des dictionnaires et des listes incluant le japonais en Python
Renvoyez les données d'image avec Flask of Python et dessinez-les dans l'élément canvas de HTML