[PYTHON] Scraping Shizuokas offizielle GoToEat-Website

Einführung

Durchsuchen der offiziellen GoToEat-Website in Shizuoka, Auflisten der für die Izu-Kampagne vorgesehenen Geschäfte

Im Artikel

import urllib.request
html = urllib.request.urlopen(url).read()

Dieselbe Seite wird nur angezeigt, weil die Suchbedingung nicht angegeben ist. Auch wenn dieselbe URL im Browser geöffnet wird, unterscheiden sich die angezeigten Inhalte zwischen der neuen und der zweiten. Anscheinend wird die Sitzung beurteilt.

Also habe ich nachgeschlagen

URL-Änderungen

Seite unmittelbar nach der Suche nach "Izu City" https://premium-gift.jp/fujinokunigotoeat/use_store?events=search&id=&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=

Weiter (2. Seite) https://premium-gift.jp/fujinokunigotoeat/use_store?events=page&id=2&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=

Zurück (1. Seite) https://premium-gift.jp/fujinokunigotoeat/use_store?events=page&id=1&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=

Der Unterschied zwischen der Seite unmittelbar nach der Suche und der Rückgabe (erste Seite) scheint darin zu bestehen, dass sich die URL zwischen "events = search" und "events = page" sowie "id =" und "id = 1" geändert hat.

Der Unterschied zwischen der Rückgabe (1. Seite) und der nächsten (2. Seite) ist "id = 1" und "id = 2", daher habe ich festgestellt, dass id die Anzahl der Seiten ist.

Zugriff

Zurück zur Testversion (1. Seite) Wenn Sie von der URL ausgehen, werden die Suchergebnisse nicht angezeigt, sodass die angezeigten Inhalte unterschiedlich sind.

  1. Greifen Sie sofort nach der Suche nach "Izu City" auf die URL der Seite zu.
  2. Greifen Sie auf die URL der Rückseite (1. Seite) zu

Es scheint, dass Sie in der Reihenfolge von zugreifen können

Was die URL der nächsten Seite betrifft, habe ich die URL im Link des Kopfes gefunden. Wenn Sie versuchen, die nächste Seite unmittelbar nach der Suche von der Seite abzurufen, "id = 2", dann "id = 22", dann "id = 222". Eine Seite mit 2 erhöht wird zurückgegeben (w)

Schaben

import requests
from bs4 import BeautifulSoup

import time

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
}

with requests.Session() as s:

    #Keine Suche erforderlich, um alle zu erhalten
    # url = "https://premium-gift.jp/fujinokunigotoeat/use_store"

    #Im Falle einer Suche greifen Sie zu, nachdem Sie die Suchseite einmal angezeigt haben
    s.get("https://premium-gift.jp/fujinokunigotoeat/use_store?events=search&id=&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=")
    url = "https://premium-gift.jp/fujinokunigotoeat/use_store?events=page&id=1&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry="

    result = []

    while True:

        r = s.get(url, headers=headers)
        r.raise_for_status()

        soup = BeautifulSoup(r.content, "html.parser")

        for store in soup.select("div.store-card__item"):

            data = {}
            data["Speichername"] = store.h3.get_text(strip=True)

            for tr in store.select("table.store-card__table > tbody > tr"):
                data[tr.th.get_text(strip=True).rstrip(":")] = tr.td.get_text(
                    strip=True
                )

            result.append(data)

        tag = soup.select_one("head > link[rel=next]")

        print(tag)

        if tag:

            url = tag.get("href")

        else:
            break

        time.sleep(3)
import pandas as pd

df = pd.DataFrame(result)

#Bestätigung der Anzahl der Registrierungen
df.shape

df.to_csv("shizuoka.csv", encoding="utf_8_sig")

#Doppelte Bestätigung
df[df.duplicated()]

df

Recommended Posts

Scraping Shizuokas offizielle GoToEat-Website
Scraping Shizuokas offizielle GoToEat-Website und Auflistung der Geschäfte, die für die Izu-Kampagne bestimmt sind
Scraping: Website lokal speichern
Scraping Mitgliederbilder von der offiziellen Website der Sakamichi Group
Website-Scraping mit Beautiful Soup in Python