Shizuoka verkauft zwei Arten von Essenskarten.
Rotes Fuji-Ticket | Blaues Fuji-Ticket | |
---|---|---|
Geldbetrag | 1 Buch 8,000 Yen(10,000 Yen verfügbar) | 1 Buch 10,000 Yen(12,500 Yen verfügbar) |
URL | https://premium-gift.jp/fujinokunigotoeat/ | https://gotoeat-shizuoka.com/ |
Roboter Metatag | index,follow | noindex, follow |
Der Grund, warum ich mich für das Scrapen entschieden habe, ist, dass keine der beiden Sites vom Zielspeicher in der Liste angezeigt werden kann. Der Käufer eines Essenstickets muss die Zielgeschäfte nach Namen usw. eingrenzen oder den Pager-Link mehrmals ändern. Für die Überprüfung des Roboter-Meta-Tags auf der offiziellen Website ist das blaue Fuji-Ticket kein Index, sodass nur das rote Fuji-Ticket als Ziel ausgewählt wird.
urllib Es gibt verschiedene Methoden und Bibliotheken für das Web-Scraping. Zuerst habe ich mich für die Urllib-Bibliothek entschieden, die viele Informationen enthält und einfach zu sein scheint.
#Akquisitionsbeispiel
import urllib.request
html = urllib.request.urlopen(url).read()
Dieselbe Seite wird jedoch nur angezeigt, weil die Suchbedingungen nicht angegeben sind. Selbst wenn dieselbe URL im Browser geöffnet wird, unterscheiden sich die angezeigten Inhalte zwischen der neuen und der zweiten. Anscheinend wird die Sitzung beurteilt.
Selenium Aufgrund verschiedener Untersuchungen war dies mit Selen möglich. Selenium ist eine Testautomatisierungsbibliothek für Webanwendungen, mit der Sie den Browser programmgesteuert bedienen können.
#Akquisitionsbeispiel
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')
Im Fall von Google Colaboratory können Sie es ausführen, indem Sie Folgendes ausführen.
Installation
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
Quelle
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
#Führen Sie den Browser im Hintergrund aus
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
area_nm = 'Izu Stadt'
df_all = pd.DataFrame(columns=['area_nm', 'shop_nm'])
#Starten Sie den Browser
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(10)
#Einstiegsbild
driver.get("https://premium-gift.jp/fujinokunigotoeat/use_store")
driver.implicitly_wait(10)
print(driver.current_url)
#Suchausführung
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:
#Suchergebnisse
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)
#zur nächsten Seite
link_list = driver.find_elements_by_class_name('pagenation__item')
for link_item in link_list:
if link_item.text == "Nächster":
link_item.click()
driver.implicitly_wait(10)
print(driver.current_url)
shouldLoop = False
#Wenn keine Seite angezeigt werden soll, beenden Sie das Programm
if current_url != driver.current_url:
shouldLoop = True
driver.close()
#CSV-Ausgabe
df_all.to_csv(f'shoplist.csv', index=False)
Ich hoffe, dass die Websites für rote Fuji-Tickets und blaue Fuji-Tickets verbessert werden. Bei der Suche wird nur Izu City als Schlüsselwort verwendet, Sie können jedoch die Bedingungen ändern.
Recommended Posts