[RUBY] Ich möchte die Anzahl der Foto-AC-Downloads grafisch darstellen [MySQL-Ring-Kooperation] ~ Codierung von 10 Zeilen pro Tag ~

Tag 4

Von gestern an werden wir einen Teil der Grafik-App erstellen, in dem die Daten tatsächlich gespeichert werden.

[Technisches Thema]

Umgebung

Sprache

Ziel zu liefern

Heute möchte ich den Aufbau der MySQL-Umgebung abschließen und die vorherigen Informationen in der Datenbank speichern.

Code und Dokumentation

1. Installieren Sie MySQL

https://qiita.com/hkusu/items/cda3e8461e7a46ecf25d Führen Sie den angegebenen Befehl aus, der auf diesen Artikel verweist

[Ausführungsbefehl]

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Ergebnis

curl: (22) The requested URL returned error: 404 Not Found

Es war wahrscheinlich nutzlos, weil die referenzierten Daten alt waren .... Ich dachte, dies ist eine Homebrew-Installation und sollte durchgeführt werden, damit ich den nächsten MySQL-Installationsteil ausführen kann. [Ausführungsbefehl]

brew update
brew install mysql

Die Installation ist damit abgeschlossen! Ich habe das Passwort usw. festgelegt, aber es scheint, dass es von der letzten Sequenz pro nicht mehr leicht zugänglich ist ....

ALTER USER 'Nutzername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Passwort';

Ich musste diese Einstellung vornehmen.

2. Bibliothek hinzufügen

Um Daten in MySQL zu speichern, benötigen wir eine Bibliothek. Fügen Sie daher die folgende Zeile zur Gemfile hinzu.

gem 'activerecord'
gem 'mysql2', '0.5.2'

In diesem Zustand

bundle install --path .bundle Wenn Sie ausführen. Ich habe einen Fehler bekommen

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

Als ich diesen Befehl ausführte, konnte ich ihn problemlos installieren.

3. Speicherung von Protokolldaten

Definieren Sie zunächst eine Tabelle zum Speichern der Daten. Was wir diesmal brauchen, ist, wie viele Bilder in welchen Tagen heruntergeladen wurden. Ich habe mich gefragt, ob die Tabelle ungefähr so aussehen würde, wie unten gezeigt.

CREATE TABLE `logs` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `image_id` int DEFAULT NULL,
  `download` int DEFAULT NULL,
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Ändern Sie dann den Code für den Crawler. Zuerst für die Verbindung zu MySQL

crawler.rb


require 'active_record'
require 'date'


#DB-Verbindungsverarbeitung
ActiveRecord::Base.establish_connection(
  :adapter  => 'mysql2',
  :database => 'Name der Datenbank',
  :host     => 'localhost',
  :username => 'Nutzername',
  :charset => 'utf8mb4',
  :encoding => 'utf8mb4',
  :collation => 'utf8mb4_general_ci',
  :password => 'Passwort'
)

class Log < ActiveRecord::Base; end

Fügen Sie den obigen Code hinzu. Darüber hinaus der Hauptteil des Parsing-Prozesses

crawler.rb


page = agent.get("https://www.photo-ac.com/creator/list/?pl_q=&pl_order=-releasedate&pl_pp=200&pl_disp=all&pl_ntagsec=&pl_tags50over=&pl_chkpsd=")
doc = Nokogiri::HTML.parse(page.body, nil, 'utf-8')
doc.css(".photo-list").each{|div|
  image_id =  div.css(".sectiondata li")[0].text.split(":")[1]
  download = div.css(".sectionimg .preview")[0].text
  Log.create({image_id:image_id,download:download,date:Date.today})
}

Schreiben Sie so um. Und wenn Sie es wie gewohnt ausführen, werden die Daten ordnungsgemäß gespeichert.

Damit ist der Datenerfassungsteil abgeschlossen. (Es ist ein bisschen vorbei ...)

Recommended Posts

Ich möchte die Anzahl der Foto-AC-Downloads grafisch darstellen [MySQL-Ring-Kooperation] ~ Codierung von 10 Zeilen pro Tag ~
Ich möchte die Anzahl der Foto-AC-Downloads grafisch darstellen [Scraping-Implementierung] ~ 10 Zeilen pro Tag Codierung ~
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte den Inhalt der Absicht var_dump
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
Ich möchte eine Methode einer anderen Klasse aufrufen
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
[Java] Ich möchte ein Byte-Array in eine Hexadezimalzahl konvertieren
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
Ich möchte dem select-Attribut einen Klassennamen geben
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ich habe ein Juwel gemacht, um den Text des Org-Modus in Qiita zu posten
Ich möchte die Eingabe begrenzen, indem ich den Zahlenbereich einschränke
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
Codierung von 10 Zeilen pro Tag ~ Scraping-Implementierung ~
Ein Memo, wenn Sie den Zeitteil des Kalenders löschen möchten
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
Erstellen Sie einen Mechanismus zum Buchen von Reservierungen an Qiita [Reservierungsbuchung] ~ Codieren von 10 Zeilen pro Tag ~ ~
Ich möchte die JSP des offenen Portlets bei der Entwicklung von Liferay kennen
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
[Circle CI] Ich war süchtig nach dem automatischen Test von Circle CI (Rails + MySQL) [Memo]
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich möchte, dass Sie Enum # name () für den Schlüssel von SharedPreference verwenden
Immerhin wollte ich den Inhalt von MySQL mit Docker in der Vorschau anzeigen ...
Ich möchte eine Liste nur eindeutiger Zeichenfolgen erhalten, indem feste Zeichenfolgen vom Dateinamen ausgeschlossen werden