[RUBY] Codierung von 10 Zeilen pro Tag ~ Aufbau der Kratzumgebung ~

Überblick

Von nun an möchte ich jeden Tag etwa 10 Zeilen Quellcode veröffentlichen.

Erster Tag

【Thema】

Schaben

Sprache

Ziel zu liefern

Da es der erste Tag ist, werde ich den bekanntesten Scraping-Code schreiben, ohne übermäßig begeistert zu sein. Als ich darauf kam, wollte ich die empfohlene Animation für diese Saison wissen. https://www.anikore.jp/ Ich möchte den Top-Anime dieser Saison von dieser Seite bekommen. (Sag mir nicht, ich soll es nachschlagen ...)

Code und Dokumentation

  1. Zunächst werde ich zur Listenseite dieser Saison springen.
  2. Wenn Sie sich die http-Kommunikation ansehen, scheint es, dass HTML anstelle von API normal abfällt. Kopieren Sie diese Kommunikation also mit curl.
  3. Verwenden Sie die God-Site Curl-to-Ruby, um die vorherige Curl in Ruby-Code umzuwandeln.
  4. Das Ergebnis ist hier (Dateiname crawler.rb)

crawler.rb


require 'net/http'
require 'uri'

uri = URI.parse("https://www.anikore.jp/chronicle/2020/spring/ac:tv/")
request = Net::HTTP::Get.new(uri)
request["Authority"] = "www.anikore.jp"
request["Cache-Control"] = "max-age=0"
request["Upgrade-Insecure-Requests"] = "1"
request["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36"
request["Sec-Fetch-Dest"] = "document"
request["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
request["Sec-Fetch-Site"] = "same-origin"
request["Sec-Fetch-Mode"] = "navigate"
request["Sec-Fetch-User"] = "?1"
request["Referer"] = "https://www.anikore.jp/"
request["Accept-Language"] = "ja,en-US;q=0.9,en;q=0.8,zh-TW;q=0.7,zh;q=0.6"
request["Cookie"] = "anikore=vr4e4jp9u83qpe76nb5jf2dm35; optimizelyEndUserId=oeu1591020303990r0.9278880352532264; optimizelySegments=%7B%225639900384%22%3A%22gc%22%2C%225644680362%22%3A%22direct%22%2C%225653460252%22%3A%22false%22%7D; optimizelyBuckets=%7B%7D; _ga=GA1.2.1594135381.1591020306; __gads=ID=8dec67eec678ab98:T=1591020306:S=ALNI_Mam9k84TCb2IJVyBUucjbUoYYIgsQ; _gid=GA1.2.1570502140.1591280281; _gali=page-top; _gat=1"

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end

Zu diesem Zeitpunkt waren es etwas mehr als 10 Zeilen ...

  1. Ich möchte diese HTML-Datei mit Rubys Nokogiri analysieren. Bereiten Sie also eine "Gem-Datei" vor und schreiben Sie Folgendes.
source 'https://rubygems.org'

gem 'nokogiri'

Starten Sie in diesem Zustand das Terminal

bundle install --path .bundle

Ausführen.

  1. Regentag Fehler Wenn ich nach langer Zeit versuchte, Nogiri zu setzen, war ich normalerweise wütend ... Nicht alles auf der Welt läuft so, wie Sie es wollen.
Fetching gem metadata from https://rubygems.org/.................
Resolving dependencies...
Using bundler 1.17.2
Fetching mini_portile2 2.4.0
Installing mini_portile2 2.4.0
Fetching nokogiri 1.10.9
Installing nokogiri 1.10.9 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/itayayuichiro/Documents/src/crawler/qiita_crawler/.bundle/ruby/2.6.0/gems/nokogiri-1.10.9/ext/nokogiri
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r
./siteconf20200604-4813-yjwd2f.rb extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

extconf failed, exit code 1

Gem files will remain installed in /Users/itayayuichiro/Documents/src/crawler/qiita_crawler/.bundle/ruby/2.6.0/gems/nokogiri-1.10.9 for inspection.
Results logged to /Users/itayayuichiro/Documents/src/crawler/qiita_crawler/.bundle/ruby/2.6.0/extensions/universal-darwin-19/2.6.0/nokogiri-1.10.9/gem_make.out

An error occurred while installing nokogiri (1.10.9), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.10.9' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  nokogiri

Vorerst diese Site Versuchen Sie, die folgenden 4 Befehle mit Bezug auf auszuführen.

$ brew tap homebrew/dupes
$ brew install libxml2 libxslt libiconv 
$ brew link --force libxml2                    ##--force--Mit Optionen installieren
$ brew link --force libxslt                      ##--force--Mit Optionen installieren

Ich dachte, aber als ich die erste Zeile ausführte, bekam ich einen Fehler ...

Updating Homebrew...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

Da die nachfolgende Verarbeitung jedoch abgeschlossen ist, werde ich sie vorerst ignorieren und fortfahren. → Es scheint nutzlos zu sein, wenn ich den nächsten Befehl eingegeben habe

xcode-select --install

Führen Sie dies aus

Die Installation wird einige Zeit dauern, daher werde ich morgen fortfahren .... lol

Recommended Posts

Codierung von 10 Zeilen pro Tag ~ Aufbau der Kratzumgebung ~
Codierung von 10 Zeilen pro Tag ~ Scraping-Implementierung ~
Mach eine Sprache! (Java CC-Umgebungskonstruktion)
Muskel Rubin auf Schienen Tag 1 ~ Umweltbau ~
Erstellen Sie einen Mechanismus zum Buchen von Reservierungen an Qiita [Reservierungsbuchung] ~ Codieren von 10 Zeilen pro Tag ~ ~
[Java] Umgebungskonstruktion
Erstellen Sie einen Mechanismus zum Buchen von Reservierungen an Qiita [Entwurf einer Akquisition] ~ Codierung von 10 Zeilen pro Tag ~ ~
[Frühling] Umweltbau
Aufbau der Penronse-Umgebung [Windows]
[Flattern] Ubuntu 20.04 Umgebungskonstruktion
Aufbau der Rails Docker-Umgebung
Java Entwicklungsumgebung Konstruktion
Erstellen Sie eine Java- und JavaScript-Teamentwicklungsumgebung (Gradle-Umgebungskonstruktion)
Ich möchte die Anzahl der Foto-AC-Downloads grafisch darstellen [Scraping-Implementierung] ~ 10 Zeilen pro Tag Codierung ~