Dieser Artikel basiert auf dem Inhalt des folgenden Videos, das zuvor auf YouTube veröffentlicht wurde.
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>
Zunächst werde ich den im folgenden Video geschriebenen Code einfügen.
!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
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.)
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).
Ich werde einige ergänzende Erklärungen zu dem Code geben, den ich geschrieben habe.
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.
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.
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.)
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.
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
Das ist es.
Ich lade gelegentlich Python-bezogene Videos auf YouTube hoch. Bitte schauen Sie, wenn Sie möchten!