[RUBY] Scraping der GoToEat Osaka-Kampagnenseite in eine CSV-Datei

Überblick

Die GoToEat Osaka-Kampagnenseite enthält eine Store-Suchseite, die Karte kann jedoch nicht angezeigt werden.

https://goto-eat.weare.osaka-info.jp/gotoeat/

Sie können die Karte mithilfe der Google Map-API anzeigen. Zunächst müssen Sie die Zielspeicher jedoch in einem Tabellenformat speichern.

Ich habe es mit Nokogiri von Ruby abgekratzt.

Code

require 'open-uri'
require 'nokogiri'
require "csv"

@id=0
@page=1
@hashes=[]

# GoToEat Osaka Seite (1. Seite)
@url = 'https://goto-eat.weare.osaka-info.jp/?search_element_0_0=2&search_element_0_1=3&search_element_0_2=4&search_element_0_3=5&search_element_0_4=6&search_element_0_5=7&search_element_0_6=8&search_element_0_7=9&search_element_0_8=10&search_element_0_9=11&search_element_0_cnt=10&search_element_1_cnt=18&searchbutton=%E5%8A%A0%E7%9B%9F%E5%BA%97%E8%88%97%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B&csp=search_add&feadvns_max_line_0=2&fe_form_no=0'

def scraping(page)
 #Öffnen Sie die Seite, laden Sie den HTML-Code und übergeben Sie ihn an die Variable HTML
   html = open(@url) {|f| f.read}
  charset = "utf8"
 Erstellen Sie ein Objekt, indem Sie #html analysieren (analysieren)
  doc = Nokogiri::HTML.parse(html, nil, charset)

   doc.xpath('/html/body/div/div[1]/main/section/div/div/ul/li').each { |node|
 #Create Hash, ein Datentresor
    hash=Hash.new(nil)
    keys=[:id,:name,:address,:tel,:open,:close,:category1,:category2]
     keys.each {|key| hash.store(key,nil)}

    hash.store(:id,@id)
    hash.store(:name,node.xpath("p").inner_text)
    trs=node.xpath("table").xpath("tr")
    address=trs[0].xpath("td").inner_text
    address.gsub!("\r\n","")
    address.gsub!(/[[:space:]]/,"")
    hash.store(:address,address)
    hash.store(:tel,trs[1].xpath("td").inner_text)
    hash.store(:open,trs[2].xpath("td").inner_text)
    hash.store(:close,trs[3].xpath("td").inner_text)
    categories=node.xpath("ul").xpath("li")
    hash.store(:category1,categories[0].inner_text)  if categories[0]
    hash.store(:category2,categories[1].inner_text)  if categories[1]
    @id+=1
    @hashes << hash

     CSV.open("GoToEatOsaka.csv", "a", headers: hash.keys) {|csv|
      csv << hash.values
    }
  }

 # Finde die nächste Seite
  as=doc.xpath("/html/body/div/div[1]/main/section/div/div/div[2]").xpath("a")
   as.each{|a|
    content=a.get_attribute("title")
    if content=="Page #{page}" then
      puts page
      @url=a.attribute("href")
      break
    end
  }
end

 (2..221).each{|page|
  scraping(page)
}

Ausführungsergebnis

image.png

Ich konnte es schön als CSV speichern.

Recommended Posts

Scraping der GoToEat Osaka-Kampagnenseite in eine CSV-Datei
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Erstellen Sie eine U-Bahn-Karte von Tokio aus der CSV-Datei von station data.jp
Erstellen Sie mit dem Befehl eine JAR-Datei