[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.

Bei der Entwicklung des Systems musste ich Informationen von anderen WEB-Seiten abrufen, daher habe ich einen Crawler erstellt.

Erster Gedanke

Ich habe versucht, die Informationen von anderen WEB-Seiten abzurufen und in der Datenbank der App zu speichern, die ich gerade erst erstelle. Also, ist es kratzend, irgendwie "Informationen zu bekommen"? Ich war begeistert davon ...

Ich begann die Untersuchung und fand es heraus

Was ich versuchte, war sicherlich Schaben. Um diese Informationen zu erhalten, stellte sich jedoch heraus, dass wir zuerst einen sogenannten Crawler erstellen mussten.

Was ist ein Crawler?

Auf der anderen Seite ist der Crawler eine Methode, um alle Links auf der Webseite zu durchsuchen und die gewünschten Informationen zu erhalten, während Sie tief graben. Dieser Vorgang selbst wird als Kriechen bezeichnet. Bei der Suche nach einem Link mit einem Crawler wird natürlich ein Scraping durchgeführt und das HTML-Tag analysiert, um das Linkziel zu erhalten.

http://tech.feedforce.jp/anemone_crawler.html

Was ist Schaben?

Scraping ist das Extrahieren von Daten durch Parsen des HTML-Codes einer Webseite.

webdesign-3411373_640.jpg

Zusamenfassend, ● Scraping kann verwendet werden, wenn Informationen auf einer Seite gesammelt werden. ● Der Crawler überwacht die Website.

So kann ich den Ablauf von "Erstellen eines Crawlers → Schreiben des Codes für das Scraping darin → Schreiben der Beschreibung, die in der Datenbank gespeichert werden soll" sehen.

Quellcode abgeschlossen

#Rubinstein verwenden Aktiviert, um die Nokogiri-Anemone zu verwenden
require 'nokogiri'
require 'anemone'
require 'pry'
#URL als Ausgangspunkt für die Patrouille
URL = 'https://********/********'.freeze

area_urls = []
prefecture_urls = []
city_urls = []
#Beschreibung, die sich um die Site dreht
Anemone.crawl(URL, depth_limit: 0, delay: 1) do |anemone|
  anemone.focus_crawl do |page|
    page.links.keep_if do |link|
      link.to_s.match(%r{*********/[0-9]{1,2}})
    end
    page.links.each do |link|
      area_urls << link
    end
  end
end

area_urls.each do |area|
  Anemone.crawl(area, depth_limit: 0, delay: 1) do |anemone|
    anemone.focus_crawl do |page|
      page.links.keep_if do |link|
        link.to_s.match(%r{**********/[0-9]{1,2}/[0-9]{5}})
      end
      page.links.each do |link|
        prefecture_urls << link
      end
    end
  end
end

prefecture_urls.each do |prefecture|
  Anemone.crawl(prefecture, depth_limit: 1, delay: 1, skip_query_strings: true) do |anemone|
    anemone.focus_crawl do |page|
      page.links.keep_if do |link|
        link.to_s.match(%r{**********/[0-9]{1,2}/[0-9]{5}/[0-9]})
      end
      page.links.each do |link|
        city_urls << link
      end
    end

    PATTERN = %r[**********/[0-9]{1,2}/[0-9]{5}/[0-9]].freeze

    anemone.on_pages_like(PATTERN) do |page|
      url = page.url.to_s

      str = url.to_s

      html = URI.parse(url).open
      #Beschreibung des Schabens von hier
      doc = Nokogiri::HTML.parse(html, nil, 'UTF-8')
#Geben Sie HTML mit Xpath an
      name = doc.xpath('/html/body/div[4]/div/div[2]/div[1]/h1').text
      pos = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[3]/td/text()[1]').text
      post = pos.strip
      postcode = post.match(/[0-9]{7}/)
      add = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[3]/td/text()[2]').text
      address = add.strip
      tel = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[4]/td').text
      fax = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[5]/td').text
      staff_number = doc.xpath('/html/body/div[4]/div/div[2]/table[4]/tbody/tr[1]/td/p').text
      company = doc.xpath('/html/body/div[4]/div/div[2]/table[5]/tbody/tr[2]/td').text
      office_url = doc.xpath('/html/body/div[4]/div/div[2]/table[1]/tbody/tr[6]/td/a').text
      #Extrahieren Sie 5-stellige Zahlen aus der URL mit regulärem Ausdruck
      if str =~ %r{/(\d{5})(/|$)}
        city_number = Regexp.last_match(1)
        p Regexp.last_match(1)
      end
#Erstellen Sie eine Instanz, speichern Sie die durch Scraping erhaltenen Informationen in der Datenbank und ignorieren Sie die Validierung zu diesem Zeitpunkt.
      offices = Office.new(name: name,
                           postcode: postcode,
                           tel: tel,
                           fax: fax,
                           address: address,
                           staff_number: staff_number,
                           company: company,
                           url: office_url,
                           city_number: city_number)
      offices.save(validate: false)
    end
  end
end




Recommended Posts

[Ruby] Ich habe einen Crawler mit Anemone und Nokogiri gemacht.
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe mit Ruby On Rails ein Portfolio erstellt
Ich habe mit Swing eine GUI erstellt
[Ruby] Ich habe einen einfachen Ping-Client erstellt
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Janken App mit Android gemacht
04. Ich habe mit SpringBoot + Thymeleaf ein Frontend gemacht
Ich habe Mosaikkunst mit Pokemon-Bildern gemacht
Ich habe versucht, Ruby mit Ruby (und C) zu implementieren (ich habe mit Builtin gespielt)
Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)
Ich habe eine Ruby-Erweiterungsbibliothek in C erstellt
Ich habe einen LINE Bot mit Rails + Heroku gemacht
Ich habe im Frühjahr einen Restful-Server und -Client erstellt.
Ich habe DI mit Ruby versucht
Ich habe eine Chat-App erstellt.
Ich habe eine Entwicklungsumgebung mit Rails6 + Docker + PostgreSQL + Materialise erstellt.
Ich habe einen Interpreter (Compiler?) Mit ungefähr 80 Zeilen in Ruby erstellt.
Ich habe ein Plug-In erstellt, das Jextract mit Gradle-Aufgaben ausführt
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe meinen eigenen mit Ruby erstellten Blackjack für mein Portfolio aktualisiert
Ich habe mit Gem in Ruby nach einem Webframework gesucht
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Ich habe einen MOD erstellt, der sofort ein Fahrzeug mit Minecraft anruft
Installieren Sie Ruby 3.0.0 Preview 1 mit einer Kombination aus Homebrew und rbenv
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
Ich habe mit JD-Core eine Befehlszeilenschnittstelle mit dem WinMerge Plugin erstellt
[Rails] Ich habe eine einfache Kalender-Mini-App mit benutzerdefinierten Spezifikationen erstellt.
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
Ich habe eine shopify App @java erstellt
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Ich habe eine einfache Empfehlungsfunktion erstellt.
Ich habe eine passende App erstellt (Android App)
Ich habe ein Tool zur Generierung von package.xml erstellt.
[Android] Ich habe eine Schrittzähler-App erstellt.
Machen Sie ein Tippspiel mit Ruby
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Ich habe eine Rails-Umgebung mit Docker und MySQL erstellt, aber ich war krank
Ich habe einen Arbitrage-Transaktionsbot für virtuelle Währungen erstellt und versucht, Geld zu verdienen
Ich habe eine Lambda-Funktion in Java geschrieben und mit SAM bereitgestellt
Ich habe eine Klasse erstellt, die JUMAN und KNP aus Java verwenden kann
[LINE BOT] Ich habe einen Ramen BOT mit Java (Maven) + Heroku + Spring Boot (1) gemacht.
Ich habe mit Vue.js eine Seite erstellt, die Informationen zur Zuckereinschränkung zusammenfasst
Mit Rubin ● × Game und Othello (Grundlegende Bewertung)
Ich habe ein Kalenderproblem mit Ruby versucht
Ich habe verschiedene Funktionen der Fibonacci-Sequenz (Ruby) erstellt.
Ich habe einen Öko-Server mit Scala gemacht
Zeichnen Sie Diagramme mit Sinatra und Chartkick
Ich habe versucht, ein wenig mit BottomNavigationView zu spielen ①
Extrahieren Sie einen Teil einer Zeichenfolge in Ruby
Ich habe ein Plug-In für IntelliJ IDEA erstellt
Ich habe eine Taschenrechner-App für Android erstellt
Ich habe ein neues Java-Bereitstellungstool erstellt