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é.
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)
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.