[PYTHON] Scraping du site officiel GoToEat de Shizuoka et liste des magasins ciblés pour la campagne Izu

Shizuoka vend deux types de tickets repas.

Billet Fuji rouge Billet Fuji bleu
Somme d'argent 1 livre 8,000 yens(10,000 yens disponibles) 1 livre 10,000 yens(12,500 yens disponibles)
URL https://premium-gift.jp/fujinokunigotoeat/ https://gotoeat-shizuoka.com/
metatag robots index,follow noindex, follow

La raison pour laquelle j'ai décidé de gratter en premier lieu est qu'aucun site ne peut être consulté par le magasin cible dans la liste. L'acheteur d'un ticket de repas doit restreindre les magasins cibles par nom, etc., ou changer le lien du téléavertisseur plusieurs fois. En ce qui concerne la vérification de la balise Meta des robots sur le site officiel, le ticket Fuji bleu n'est pas un index, donc seul le ticket Fuji rouge est ciblé.

Grattage Web

urllib Il existe différentes méthodes et bibliothèques pour le web scraping. Tout d'abord, j'ai choisi la bibliothèque urllib, qui contient beaucoup d'informations et semble facile.

    #Exemple d'acquisition
    import urllib.request
    html = urllib.request.urlopen(url).read()

Cependant, la même page s'affiche uniquement car les conditions de recherche ne sont pas spécifiées. 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.

Selenium À la suite de diverses enquêtes, cela a été possible avec Selenium. Selenium est une bibliothèque d'automatisation de test pour les applications Web qui vous permet d'utiliser le navigateur par programmation.

    #Exemple d'acquisition
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    driver = webdriver.Chrome('chromedriver',options=options)
    driver.get(url)
    html = driver.page_source.encode('utf-8')

Dans le cas de Google Colaboratory, vous pouvez l'exécuter en exécutant ce qui suit.

Installation

    !apt-get update
    !apt install chromium-chromedriver
    !cp /usr/lib/chromium-browser/chromedriver /usr/bin
    !pip install selenium

La source

    import pandas as pd
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    #Exécutez le navigateur en arrière-plan
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    area_nm = 'Ville d'Izu'
    df_all = pd.DataFrame(columns=['area_nm', 'shop_nm'])
    #Lancer le navigateur
    driver = webdriver.Chrome('chromedriver',options=options)
    driver.implicitly_wait(10)
    #écran initial
    driver.get("https://premium-gift.jp/fujinokunigotoeat/use_store")
    driver.implicitly_wait(10)
    print(driver.current_url)
    #Exécution de la recherche
    driver.find_element_by_id('addr').send_keys(area_nm)
    driver.find_element_by_class_name('store-search__submit').click()
    driver.implicitly_wait(10)
    print(driver.current_url)
    shouldLoop = True
    while shouldLoop is True:
      #Résultats de recherche
      current_url = driver.current_url
      shop_nm_list = driver.find_elements_by_class_name("store-card__title")
      for idx, shop_item in enumerate(shop_nm_list):
        row = pd.Series( [ area_nm, shop_item.text ], index=df_all.columns )
        df_all = df_all.append(row, ignore_index=True )
        print(shop_item.text)
      
      #à la page suivante
      link_list = driver.find_elements_by_class_name('pagenation__item')
      for link_item in link_list:
        if link_item.text == "prochain":
          link_item.click()
          driver.implicitly_wait(10)
          print(driver.current_url)
      
      shouldLoop = False
      #S'il n'y a pas de page à afficher, quittez
      if current_url != driver.current_url:
          shouldLoop = True
    driver.close()
    #Sortie CSV
    df_all.to_csv(f'shoplist.csv', index=False)

finalement

J'espère que les sites de billets Fuji rouges et bleus Fuji seront améliorés. La recherche utilise uniquement Izu City comme mot-clé, mais vous pouvez modifier les conditions.

Recommended Posts

Scraping du site officiel GoToEat de Shizuoka et liste des magasins ciblés pour la campagne Izu
Cartographiez et profitez des magasins ciblés pour la campagne GoToEat
Scraping du site officiel GoToEat de Shizuoka
Gratter les images des membres du site officiel du groupe Sakamichi