Bei der Entwicklung des Systems musste ich Informationen von anderen WEB-Seiten abrufen, daher habe ich einen Crawler erstellt.
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 ...
Was ich versuchte, war sicherlich Schaben. Um diese Informationen zu erhalten, stellte sich jedoch heraus, dass wir zuerst einen sogenannten Crawler erstellen mussten.
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
Scraping ist das Extrahieren von Daten durch Parsen des HTML-Codes einer Webseite.

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.
#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