[RUBY] Scraping de la page de campagne GoToEat Osaka dans un fichier csv

Aperçu

La page de la campagne GoToEat Osaka a une page de recherche de magasin, mais je ne peux pas afficher la carte.

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

Vous pouvez afficher la carte à l'aide de l'API Google Map, mais vous devez d'abord stocker les magasins cibles dans un format de tableau.

Je l'ai gratté en utilisant Nokogiri de Ruby.

code

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

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

# Page GoToEat Osaka (1ère page)
@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)
 #Ouvrez la page, chargez le html et transmettez-le à la variable html
   html = open(@url) {|f| f.read}
  charset = "utf8"
 Créer un objet en analysant (analysant) #html
  doc = Nokogiri::HTML.parse(html, nil, charset)

   doc.xpath('/html/body/div/div[1]/main/section/div/div/ul/li').each { |node|
 #Create hash, qui est un coffre-fort de données
    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
    }
  }

 # Trouver la page suivante
  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)
}

Résultat d'exécution

image.png

J'ai pu l'enregistrer au format csv joliment.

Recommended Posts

Scraping de la page de campagne GoToEat Osaka dans un fichier csv
J'ai créé un outil pour afficher la différence du fichier CSV
Créez une carte du métro de Tokyo à partir du fichier CSV de la station data.jp
Créez un fichier jar avec la commande