[Python] Speichern Sie das Ergebnis des Web-Scrapings der Mercari-Produktseite in Google Colab in einer Google-Tabelle und zeigen Sie auch das Produktbild an.

Dieser Artikel basiert auf dem Inhalt des folgenden Videos, das zuvor auf YouTube veröffentlicht wurde.

[Python lernen] Speichern Sie das Ergebnis des Web-Scrapings der Mercari-Produktseite in einer Google-Tabelle und zeigen Sie das Bild des Produkts an

Der in diesem Artikel behandelte Inhalt dient nur zu Lernzwecken. In einigen Fällen kann das Scraping zu einer Belastung des Servers des anderen Teilnehmers führen. Bitte tun Sie dies im Rahmen des gesunden Menschenverstandes. </ font>

Python-Code für Google Colab

Zunächst werde ich den im folgenden Video geschriebenen Code einfügen.

Installieren Sie gspread

!pip install gspread

Ich hatte die Angewohnheit, explizit "gspread" einzugeben, um es zu installieren, aber ich brauchte es nicht ... Selbst wenn ich es auf diese Weise installiert habe, ergab es keinen Sinn, da es mit der ursprünglich in Colab installierten Version identisch war.

Weitere Informationen hierzu finden Sie in dem folgenden Artikel. 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

Ein Zauber, um Google-Tabellen von Colab aus zugänglich zu machen

from google.colab import auth
from oauth2client.client import GoogleCredentials
import gspread

auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())

Code für den Zugriff auf Google-Tabellen in "Google Colab". Mitten in mir ist es "nicht dasselbe" geworden.

Führen Sie diesen Code aus und Sie sehen die URL. Wenn Sie den Anweisungen auf dem Bildschirm folgen, wird die Authentifizierung selbst ohne Probleme abgeschlossen. (Es ist einfacher, wenn Sie sich im Voraus mit Ihrem eigenen Google-Konto anmelden.)

Code zum Speichern des Ergebnisses des Web-Scrapings der Mercari-Produktseite in einer Google-Tabelle und Anzeigen des Bilds des Produkts

Hier ist der eigentliche Python-Code. Bitte geben Sie die Google Spreadsheet-URL ein, unter der Sie speichern möchten.

from bs4 import BeautifulSoup
import requests

workbook_url = "URL der Google-Tabelle, in der gespeichert werden soll"
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("Erfassungs-URL: " + 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", "Titel", "Preis", "Detaillierte URL", "Bild"])

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("Erledigt!")

Wenn die Ausführung erfolgreich ist, werden die Daten mit dem Bild geschrieben, das in der Google-Tabelle angezeigt wird (siehe unten).

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

Ergänzende Erläuterung des Codes

Ich werde einige ergänzende Erklärungen zu dem Code geben, den ich geschrieben habe.

User-Agent gewähren

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)

Die Mercari-Seite scheint "403" für den Zugriff ohne "User-Agent" zurückzugeben. In Anfragen ist es möglich, "User-Agent" als Option im zweiten Argument von "get" festzulegen, sodass der Zugriff nach dem Festlegen dieses Vorgangs ausgeführt wird. Der Inhalt von "User-Agent" entspricht dem von "Google Chrome Canary" beim Erstellen des Videos. Der auf der Registerkarte "Netzwerk" von "Devtools" angezeigte Wert wird unverändert verwendet.

Über lxml

soup = BeautifulSoup(r.text, "lxml")

Da lxml von Anfang an auf Google Colab installiert ist, verursacht das plötzliche Schreiben eines solchen Codes keinen Fehler. Wenn Sie denselben Code lokal ausführen möchten, muss pip auch auf lxml installiert sein.

Über den Titel des Blattes

title = soup.find('title').get_text()

worksheet = workbook.add_worksheet(title=title, rows=100, cols=4)

Wenn ich ein Python-Skript ausführe, versuche ich, ein Blatt mit dem Titel der erfassten Seite als Blattnamen zu erstellen. In der Funktion add_worksheet werden die Höhe und Breite des zu erstellenden Blattes angegeben, aber es scheint, dass sie ohne Erlaubnis hinzugefügt werden, auch wenn sie nicht angegeben sind. (Derzeit wird es in 100 Zeilen und 4 Spalten angegeben.)

Zeigen Sie Bilder mit der IMAGE-Funktion von Google Spreadsheet an

  image = "=IMAGE(\"" + item.find("img")["src"] + "\")"
  worksheet.append_row([i, item_title, item_price, item_url, image], value_input_option="USER_ENTERED")

Verwenden Sie die IMAGE-Funktion der Google-Tabelle, um ein Bild in einer Google-Tabelle anzuzeigen.

IMAGE --Document Editor Help

In der Dokumentation schien es, dass einige Optionen angeboten wurden, aber ich habe sie diesmal nicht verwendet. Ich wollte die Größe der Zelle unbedingt an das Bild anpassen, aber leider wurde diese Funktion nicht bereitgestellt, sodass ich nur die Bild-URL übergebe.

Es gibt keinen Modus, um die Größe von Zellen an das Bild anzupassen.

Zitiert von der Hilfeseite oben (Ich wollte diese Funktion nutzen ...)

Selbst wenn Sie die Bild-URL unverändert übergeben, wird die Funktion "append_row" von "gspread" zu "= IMAGE" und als Zeichenfolge interpretiert. Daher wird als Option value_input_option =" USER_ENTERED " angegeben.

Wenn Sie dies angeben, ist das Verhalten dasselbe, als wenn der Benutzer das Zeichen auf dem Bildschirm in der Google-Tabelle eingibt. Wenn der Benutzer den Wert "= IMAGE (" ... ")" so wie er ist eingibt, wird er in diesem Fall auf die gleiche Weise interpretiert, sodass auf der Tabellenkalkulationsseite das Bild wie beabsichtigt angezeigt wird.

■ Referenzdokument API Reference - gspread(append_row) ValueInputOption | Sheet API

Endlich (Werbung)

Das ist es.

Ich lade gelegentlich Python-bezogene Videos auf YouTube hoch. Bitte schauen Sie, wenn Sie möchten!

Lernen Sie Python mit Safas Colab

Recommended Posts

[Python] Speichern Sie das Ergebnis des Web-Scrapings der Mercari-Produktseite in Google Colab in einer Google-Tabelle und zeigen Sie auch das Produktbild an.
Speichern Sie Bilder im Web mit Python (Colab) auf einem Laufwerk.
Führen Sie einen Befehl auf dem Webserver aus und zeigen Sie das Ergebnis an
Zeigen Sie das Bild der an den PC angeschlossenen Kamera auf der GUI an.
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
[Python] So legen Sie die Position und Größe der Fensteranzeige von matplotlib fest
[Android] Zeigen Sie Bilder im Web im infoWindow von Google Map an
[Python] Senden Sie das von der Webkamera aufgenommene Bild an den Server und speichern Sie es
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
Holen Sie sich die Größe einer Bilddatei im Web (Python3, keine zusätzliche Bibliothek erforderlich)
Lassen Sie uns mit Python Receive spielen und den Text des Eingabeformulars speichern / anzeigen
[Python] So speichern Sie Bilder mit Beautiful Soup sofort im Web
[Python] [Windows] Speichern Sie einen Screenshot als Bild
Python Open CV hat versucht, das Bild im Text anzuzeigen.
Rufen Sie die Hatena Blog API von Python aus auf und speichern Sie Ihre Blog-Artikel einzeln auf Ihrem PC
Führen Sie das Caffe-Modell in Google Colaboratory aus, um Alter und Geschlecht der Supermodels der Welt vorherzusagen
POST das ausgewählte Bild auf der Website mit mehrteiligen / Formulardaten und speichere es in Amazon S3! !!
[Super einfach! ] So zeigen Sie den Inhalt von Wörterbüchern und Listen einschließlich Japanisch in Python an
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML