[PYTHON] Ich möchte leicht einen leckeren Laden finden

Gibt es so etwas?

Ich habe versucht, auf meinem Smartphone nach Reis in einem fremden Land zu suchen, aber ...

――Es ist schwierig, ein hoch bewertetes Restaurant aus der Liste zu finden, wenn es sich um ein Lebensmittelprotokoll handelt ――Wenn es sich um eine Google Map handelt, können Sie sie nur verstehen, wenn Sie auf jeden Suchkandidaten klicken und sich die Bewertungen ansehen. ――Es ist schwer zu sagen, ob die Bewertungsseite wirklich lecker ist, da sie keine negativen Meinungen schreibt.

Selbst wenn Sie Ihr Smartphone herausnehmen und versuchen, ein köstliches Restaurant in der Stadt zu finden, ist es schwierig, weil Sie auf einen Blick kein hoch bewertetes Restaurant finden können. *** Ich möchte die hoch bewerteten Geschäfte rund um meinen aktuellen Standort kennenlernen! *** *** In diesem Fall ist die auf dieser Seite vorgestellte hoch bewertete Shop-Karte praktisch.

Was ist zu tun

Durch das Scraping sammeln wir Informationen zu den Geschäften, die in 100 Famous Eating Log Shops eingeführt wurden. Durch den Import dieser Informationen in Google My Map erstellen wir eine hoch bewertete Shop-Karte.

Vor dem Schaben

Das Extrahieren von Daten aus dem Web und das Konvertieren in strukturierte Daten, die analysiert werden können, wird als Scraping bezeichnet. Es gibt jedoch einige Einschränkungen.

Betrachten Sie das Urheberrecht

Wenn die gesammelten Daten urheberrechtlich geschütztes Material enthalten, muss das Urheberrecht berücksichtigt werden. Geben Sie die gesammelten Daten nicht durch Scraping an andere weiter und gründen Sie kein Unternehmen, das auf den gesammelten Daten basiert. Andererseits scheint das Kopieren für den privaten Gebrauch erlaubt zu sein.

Belasten Sie das Datenerfassungsziel nicht übermäßig

In vielen Fällen senden Sie wahrscheinlich mehrere Anforderungen an den Webserver, um strukturierte Daten zu erfassen. Beachten Sie, dass das Senden einer großen Anzahl von Anforderungen in kurzer Zeit zum Ausfall des Webservers führen kann. In der Vergangenheit gab es einen Präzedenzfall für die unbeabsichtigte Verhaftung.

Überprüfen Sie die Nutzungsbedingungen

Bitte lesen Sie die Nutzungsbedingungen sorgfältig durch, da sie möglicherweise verkratzen oder verboten sind. Die Website enthält auch robots.txt, eine Textdatei zur Steuerung des Crawlers. Ich werde das Überprüfen dieser Datei unterlassen, aber vor dem Scraping die Datei robot.txt der Zielwebsite überprüfen und den beschriebenen Inhalten folgen.

Überprüfen Sie die Sicherheit selbst

Ich habe die obigen Punkte kurz erläutert, aber es ist sehr wahrscheinlich, dass dies nicht ausreicht, da es sich um eine Originalkompilation handelt. Machen Sie Ihre eigenen Recherchen, um sicherzustellen, dass es keine Probleme gibt, bevor Sie kratzen.

Implementierung

Die Implementierung verwendet Python und seine Bibliothek BeautifulSoup. Diese sind die wichtigsten beim Schaben, haben viele Referenzartikel und sind selbst für Anfänger einfach zu handhaben, deshalb habe ich sie ausgewählt.

main.py


import requests
from bs4 import BeautifulSoup
from time import sleep
import pandas

url = "https://award.tabelog.com/hyakumeiten/tonkatsu"
r = requests.get(url)

soup = BeautifulSoup(r.content, "html.parser")
shoplinks = soup.findAll('a', class_='list-shop__link-page')
rowdata = []
for shoplink in shoplinks:
    url = shoplink.get("href")
    rshop = requests.get(url)
    soup = BeautifulSoup(rshop.content, "html.parser")
    print("------------------")
    print(url)
    shopname = soup.find(
        "div", class_="rdheader-rstname").find("h2").find("span")
    print(shopname)
    if shopname is not None:
        shopname = shopname.get_text().strip()
    address = soup.find("p", class_="rstinfo-table__address")
    if address is not None:
        address = address.get_text()
    print(address)
    point = soup.find("span", class_="rdheader-rating__score-val-dtl")
    if point is not None:
        point = point.get_text().strip()
    print(point)
    regholiday = soup.find("dd", class_="rdheader-subinfo__closed-text")
    if regholiday is not None:
        regholiday = regholiday.get_text().strip()[0:10]
    print(regholiday)
    rowdata.append([shopname, address, point, regholiday, url])
    sleep(5)

print(rowdata)

df = pandas.DataFrame(
    rowdata, columns=["shopname", "address", "point", "regular holiday", "url"])
df.to_csv("tonkatsu" + ".csv", index=False)

Dieser Code entspricht 100 Famous Stores 2019. Als ich Hyakumeiten 2020 überprüft habe, konnte ich die Daten nicht abrufen, da sich die Struktur der Webseite geändert hat.

Lauf

Alles was Sie tun müssen, ist Python zu installieren und dieses Skript auszuführen. Durch Ausführen dieses Codes können Sie die Daten von Tonkatsu-Geschäften abrufen, die als 100 berühmte Geschäfte mit CSV ausgewählt wurden. Wenn Sie die Knödeldaten erhalten möchten, können Sie das Ende der URL in Gyoza und das Tonkatsu in der letzten Zeile in Gyoza ändern.

In meine Karte importieren

Sie müssen lediglich die generierte CSV in Googles "Meine Karten" importieren. Nach dem Import von CSV aller Genres sollten 100 berühmte Geschäfte wie folgt dargestellt werden. map.jpg

Zusammenfassung

Auf diese Weise konnten wir durch Scraping die in den 100 berühmten Restaurants in Eating Log eingeführten Geschäftsinformationen als strukturierte Daten extrahieren und abbilden. Da My Map auf Andoroid angezeigt werden kann, können Sie sofort die 100 berühmten Geschäfte finden, die Ihrem aktuellen Standort am nächsten liegen.

Aufgabe

Es ist ein Skript, das ich vor einiger Zeit erstellt habe, aber wenn ich es mir noch einmal ansehe, ist es ein so schrecklicher Code, dass es überhaupt keine Entschuldigung ist, ein Python-Anfänger zu sein ... Eigentlich gibt es ein Skript, mit dem Sie das Genre aus dem Laufzeitargument abrufen können, aber ich habe aufgehört, weil es eine Ebene ist, deren Veröffentlichung zögert. Wenn das Folgende behoben ist, kann es auf github veröffentlicht werden.

Referenz

https://docs.pyq.jp/column/crawler.html https://www.cric.or.jp/qa/hajime/hajime8.html https://ja.wikipedia.org/wiki/%E5%B2%A1%E5%B4%8E%E5%B8%82%E7%AB%8B%E4%B8%AD%E5%A4%AE%E5%9B%B3%E6%9B%B8%E9%A4%A8%E4%BA%8B%E4%BB%B6

Recommended Posts

Ich möchte leicht einen leckeren Laden finden
Holz kratzen und essen - ich möchte ein gutes Restaurant finden! ~ (Arbeit)
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte Timeout einfach in Python implementieren
Ich möchte in der Einschlussnotation drucken
Ich möchte eine Python-Umgebung erstellen
Ich möchte einen DataFrame in MSSQL einfügen
Ich möchte mit Python ein Fenster erstellen
Wie auch immer, ich möchte JSON-Daten einfach überprüfen
Ich möchte ein Spiel mit Python machen
Ich möchte keinen Codierungstest machen
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine Django-App auf Heroku hochladen
Ich möchte einen Python-Generator viele Male iterieren
Ich möchte, dass DQN Puniki einen Homerun macht
100 Klopfen bei der Bildverarbeitung !! (021-030) Ich möchte eine Pause machen ...
Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen
Ich möchte ein Paket von Php Redis installieren
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte manuell eine Legende mit matplotlib erstellen
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte eine lokale Variable mit Lambda binden
Ich möchte SUDOKU lösen
Ich möchte einen Mox-Generator (2)
Ich möchte R-Funktionen einfach mit ipython notebook verwenden
Ich möchte eine Spalte mit NA in R einfach löschen
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
[Python] Ich möchte einen gemeinsamen Satz zwischen numpy erhalten
Ich möchte viele Prozesse von Python aus starten
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Ich möchte automatisch einen modernen Metal-Bandnamen generieren
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich möchte eine Nachricht von Python an LINE Bot senden
[Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich möchte vorerst eine Docker-Datei erstellen.
Ich möchte den Schnittpunkt einer Bezier-Kurve und einer geraden Linie finden (Bezier-Clipping-Methode)
Ich möchte systemd grob verstehen
Ich möchte Bilder kratzen und trainieren
Ich möchte ○○ mit Pandas machen
Ich möchte Yolos Anmerkung kopieren
Ich möchte mit Python debuggen
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich möchte automatisch hochwertige Teile aus den von mir aufgenommenen Videos finden
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
MacBookPro-Setup Schließlich möchte ich eine Neuinstallation durchführen