[RUBY] [Go To Travel] J'ai cherché un plan avec une carte quo

Utiliser docker

docker-compose.yml


version: "3.7"
services:
  chrome:
    image: selenium/standalone-chrome
    shm_size: 256m

  backend:
    build:
      context: ./backend
    working_dir: /app
    volumes:
      - ./backend:/app
    command: ash -c "tail -f README.md"

rails c doit seulement être possible, donc command est tail -f pour que le backend ne se termine pas même si docker-compose up

Après cela, entrez avec une commande comme docker exec -it backend_1 ash.

Appel sélénium / chrome autonome du côté des rails

models/concerns/chromeable.rb


require "selenium-webdriver"
require "capybara"

module Chromeable
  extend ActiveSupport::Concern

  DOCKER_CHROME_SELENIUM_HOST_NAME = "chrome"
  Capybara.register_driver :chrome do |app|
    args = %w[
      --headless
      --disable-gpu
      --window-size=1280,800
      --blink-settings=imagesEnabled=false
    ]

    caps =
      Selenium::WebDriver::Remote::Capabilities.chrome(
        "goog:chromeOptions" => {
          args: args,
          prefs: {
            credentials_enable_service: false,
            profile: { password_manager_enabled: false }
          }
        }
      )

    Capybara::Selenium::Driver.new(
      app,
      browser: :remote,
      desired_capabilities: caps,
      url: "http://#{DOCKER_CHROME_SELENIUM_HOST_NAME}:4444/wd/hub"
    )
  end

  included {}

  module ClassMethod; end

  def create_session
    session = Capybara::Session.new(:chrome)
    if block_given?
      begin
        yield session
      ensure
        session&.driver&.quit
      end
    else
      session
    end
  end
end

Créez un problème qui peut appeler le service chrome de docker-compose comme ceci, recherchez Jaran et prenez celui avec` / ([\ d,] +) yen / ʻ dans le nom du plan affiché. Et enregistrez-le dans la base de données. Faites ceci jusqu'à la dernière page.

models/Jalan.rb


class Jalan < ApplicationRecord
  class Crawler
    include Chromeable

    def ensure_session
      @session = create_session
      session.visit "https://www.jalan.net/uw/uwp2011/uww2011init.do?keyword=%83N%83I%83J%81%5B%83h&distCd=06&rootCd=7701&screenId=FWPCTOP&image1.x=11&image1.y=13"
      session.select "1", from: "adultNum"
      session.click_on "recherche"

      yield
    ensure
      session&.driver&.quit
    end

    ...
  end 
end

résultat

Jalan.group(:value).count
=> {3000=>201, 4000=>15, 5000=>37, 6000=>3, 7000=>2, 7700=>2, 8000=>1, 10000=>3, 30000=>2}

Il y a du bruit, mais ...

Super plan que j'ai trouvé

Je ne sais pas ce que dit un hôtel de 50 000 yens avec une carte de 30 000 yens. La carte-cadeau JCB de 10000 yens semble être beaucoup plus facile à utiliser que la carte quo.

Recommended Posts

[Go To Travel] J'ai cherché un plan avec une carte quo
J'ai recherché un framework web avec Gem en Ruby
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
[Introduction à JSP + Servlet] J'ai joué avec pendant un moment ♬
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
Je voulais mettre en place un diaporama de manière à la mode avec slick.
Je souhaite afficher un PDF chinois (coréen) avec des rapports fins
Je veux ForEach un tableau avec une expression Lambda en Java
Même en Java, je veux sortir true avec un == 1 && a == 2 && a == 3 (deuxième décoction Javassist)
SpringSecurity J'étais accro à essayer de me connecter avec un mot de passe haché (résolu)
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (Black Magic)
Je voulais que (a == 1 && a == 2 && a == 3) vrai en Java
J'ai essayé de casser le bloc avec java (1)
[Azure] J'ai essayé de créer une application Java gratuitement ~ Se connecter avec FTP ~ [Débutant]
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 1 (édition API)
J'ai fait une méthode pour demander la prime vendredi
Je veux utiliser une petite icône dans Rails
J'ai essayé de créer une compétence Clova en Java
Je souhaite surveiller un fichier spécifique avec WatchService
J'ai essayé de créer une fonction de connexion avec Java
[Comment insérer une vidéo dans un hameau avec Rails]
Je souhaite définir une fonction dans la console Rails
Je veux cliquer sur une broche GoogleMap dans RSpec
Je souhaite créer une annotation générique pour un type
Implémentation d'une API forte pour "Je veux afficher ~~ à l'écran" avec un simple CQRS
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
Tutoriel pour créer un blog avec Rails pour les débutants Partie 1
J'ai essayé de moderniser une application Java EE avec OpenShift.
Je veux trouver un chemin relatif dans une situation où Path est utilisé
[Rails] J'ai essayé de créer une mini application avec FullCalendar
J'ai créé un plug-in qui exécute jextract avec des tâches Gradle
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Je veux faire une liste avec kotlin et java!
Je voulais juste créer une propriété réactive en Java
Je veux créer une fonction avec kotlin et java!
Je suis tombé sur un gars avec deux points dans les rails
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
Je veux créer un fichier Parquet même en Ruby
Mappage à une classe avec un objet de valeur dans How to My Batis
Tutoriel pour créer un blog avec Rails pour les débutants Partie 2
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
J'ai créé un client RESAS-API en Java
J'ai essayé de créer un environnement de développement padrino avec Docker
Comment configurer un proxy avec authentification dans Feign
Tutoriel pour créer un blog avec Rails pour les débutants Partie 0
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
Comment gérer le type auquel j'ai pensé en écrivant un programme Java pendant 2 ans