概要
これから毎日10行ほどのソースコードを投稿したいと思います。
1日目
【テーマ】
スクレイピング
言語
- ruby
目標成果物
初日ということで張り切りすぎず、一番親しみのあるスクレイピングをするコードを書いていこうと思います。
パッと思いついたところで、今季のおすすめアニメが知りたいなって思ったので
https://www.anikore.jp/
こちらのサイトから今季の上位アニメを取得したいと思います。
(調べればいいじゃんとか、言わないでください...)
コードと資料
1.まずあにこれの今季一覧ページに飛びます。
2.http通信を見たところAPIとかではなくHTMLが普通に落ちてきていそうなので、そちらの通信をcurlでコピーします。
3.神サイトcurl-to-rubyを用いてさっきのcurlをrubyのコードに変換します。
4.その結果がこちら(ファイル名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
この時点で10行を軽く超えていた...
5.このHTMLファイルをRubyのnokogiriでパースしたいので「Gemfile」というものを用意して下記の記述をします。
source 'https://rubygems.org'
gem 'nokogiri'
この状態で、ターミナルを起動して
bundle install --path .bundle
を実行します。
6.まさかのエラー
久しぶりにNogiriを入れようとしたら普通に怒られた...
世の中なんでも思い通りにいくわけではないんですね。
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
とりあえずこのサイト
を参考に下記の4コマンドを実行してみます。
$ brew tap homebrew/dupes
$ brew install libxml2 libxslt libiconv
$ brew link --force libxml2 ##--force--オプションを付けてインストール
$ brew link --force libxslt ##--force--オプションを付けてインストール
と思ったが、1行目を実行したところでエラーになった...
Updating Homebrew...
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
がその後の処理が終わったのでとりあえず無視して進めてみる。
→次のコマンド打ったらダメだったっぽいので
xcode-select --install
こちらを実行
インストールに時間かかりそうなので明日に続きます....笑