[PYTHON] Scraping du site officiel GoToEat de Shizuoka

introduction

Grattage du site Web officiel de GoToEat à Shizuoka, liste des magasins ciblés pour la campagne Izu

Dans l'article

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

La même page s'affiche uniquement car la condition de recherche n'est pas spécifiée. Même lorsque la même URL est ouverte dans le navigateur, le contenu affiché est différent entre le nouveau et le second. Apparemment, il semble que Session soit jugée.

Alors j'ai cherché

Modifications d'URL

Page immédiatement après avoir recherché "Izu City" https://premium-gift.jp/fujinokunigotoeat/use_store?events=search&id=&store=&addr=%E4%BC%8A%E8%B1%86%E5%B8%82&industry=

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

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

La différence entre la page immédiatement après la recherche et le retour (première page) semble être que l'URL a changé entre "events = search" et "events = page", et "id =" et "id = 1".

La différence entre le retour (1ère page) et la suivante (2ème page) est "id = 1" et "id = 2", donc j'ai trouvé que id est le nombre de pages.

accès

Retour à l'essai (1ère page) Si vous commencez à partir de l'URL, les résultats de la recherche ne sont pas reflétés, donc le contenu affiché est différent.

  1. Accédez à l'URL de la page immédiatement après avoir recherché "Izu City"
  2. Accédez à l'URL arrière (1ère page)

Il semble que vous puissiez accéder dans l'ordre de

Quant à l'URL de la page suivante, j'ai trouvé l'URL dans le lien de la tête, alors utilisez ça, Si vous essayez d'obtenir la page suivante de la page immédiatement après la recherche, "id = 2", puis "id = 22", puis "id = 222" Une page avec 2 augmentés sera retournée (w)

Grattage

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:

    #Aucune recherche requise pour tout obtenir
    # url = "https://premium-gift.jp/fujinokunigotoeat/use_store"

    #En cas de recherche, accédez après avoir affiché une fois la page de recherche
    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["Nom du magasin"] = 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)

#Confirmation du nombre d'inscriptions
df.shape

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

#Confirmation en double
df[df.duplicated()]

df

Recommended Posts

Scraping du site officiel GoToEat de Shizuoka
Scraping du site officiel GoToEat de Shizuoka et liste des magasins ciblés pour la campagne Izu
Scraping: enregistrer le site Web localement
Gratter les images des membres du site officiel du groupe Sakamichi
Grattage de site Web avec Beautiful Soup en Python