[RUBY] Codage 10 lignes par jour ~ Construction de l'environnement de grattage ~

Aperçu

Désormais, j'aimerais publier environ 10 lignes de code source chaque jour.

Premier jour

【thème】

Grattage

Langue

Livrable cible

Puisque c'est le premier jour, je vais écrire le code de scraping le plus familier sans être trop enthousiaste. Quand je l'ai trouvé, je voulais connaître l'animation recommandée pour cette saison. https://www.anikore.jp/ J'aimerais obtenir le meilleur anime de cette saison sur ce site. (Ne me dis pas de le chercher ...)

Code et documentation

  1. Tout d'abord, je vais passer à la page de liste de cette saison.
  2. En regardant la communication http, il semble que HTML tombe normalement au lieu de l'API, alors copiez cette communication avec curl.
  3. Utilisez le site de Dieu curl-to-ruby pour convertir le curl précédent en code ruby.
  4. Le résultat est ici (nom de fichier 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

À ce stade, c'était un peu plus de 10 lignes ...

  1. Je veux analyser ce fichier HTML avec le nokogiri de Ruby, alors préparez un "Gemfile" et écrivez ce qui suit.
source 'https://rubygems.org'

gem 'nokogiri'

Dans cet état, démarrez le terminal

bundle install --path .bundle

Éxécuter.

  1. Erreur de jour de pluie Quand j'ai essayé de mettre Nogiri pour la première fois depuis longtemps, j'étais généralement en colère ... Tout dans le monde ne se déroule pas comme vous le souhaitez.
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

Pour le moment ce site Essayez d'exécuter les 4 commandes suivantes en référence à.

$ brew tap homebrew/dupes
$ brew install libxml2 libxslt libiconv 
$ brew link --force libxml2                    ##--force--Installer avec des options
$ brew link --force libxslt                      ##--force--Installer avec des options

J'ai pensé, mais quand j'ai exécuté la première ligne, j'ai eu une erreur ...

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

Cependant, puisque le traitement suivant est terminé, je vais l'ignorer pour le moment et continuer. → Il semble que c'était inutile si je tapais la commande suivante

xcode-select --install

Lance ça

Cela prendra du temps à installer, donc je continuerai demain .... lol

Recommended Posts

Codage 10 lignes par jour ~ Construction de l'environnement de grattage ~
Codage 10 lignes par jour ~ Mise en œuvre du grattage ~
Faites une langue! (Construction de l'environnement Java CC)
Muscle Ruby on Rails Jour 1 ~ Construction de l'environnement ~
Créer un mécanisme pour publier des réservations sur Qiita [Publication de réservation] ~ Codage de 10 lignes par jour ~ ~
[Java] Construction de l'environnement
Créer un mécanisme pour publier des réservations sur Qiita [Projet d'acquisition] ~ Codage de 10 lignes par jour ~ ~
[Printemps] Construction de l'environnement
Construction de l'environnement Penronse [Windows]
[Flutter] Construction de l'environnement Ubuntu 20.04
Construction de l'environnement Rails Docker
construction d'environnement de développement Java
Créer un environnement de développement d'équipe Java et JavaScript (construction d'environnement gradle)
Je veux représenter graphiquement le nombre de téléchargements de photos AC [Mise en œuvre du grattage] ~ 10 lignes par jour de codage ~