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