하루 10 라인 코딩 ~ 스크래핑 환경 구축 편 ~

개요



지금부터 매일 10 줄 정도의 소스 코드를 게시하고 싶습니다.

첫날



【테마】



스크래핑

언어


  • 루비

  • 목표 아티팩트



    첫날이라고 하는 것으로 너무 과장하지 않고, 제일 친숙한 스크래핑을 하는 코드를 써 가려고 생각합니다.
    확실히 생각했던 곳에서, 이번 시즌의 추천 애니메이션을 알고 싶다고 생각했기 때문에
    htps //w w. 오, 이것. jp/
    이 사이트에서 이번 시즌의 상위 애니메이션을 얻고 싶습니다.
    (조사하면 좋겠다든가, 말하지 마세요...)

    코드 및 자료



    1. 우선 이것의 이번 시즌 일람 페이지로 날아갑니다.
    2. http 통신을 본 바 API라든지가 아니라 HTML이 보통으로 떨어지고 있을 것 같기 때문에, 그쪽의 통신을 curl로 카피합니다.

    3. 신 사이트 curl-to-ruby 을 사용하여 조금 전의 curl을 루비 코드로 변환합니다.
    4. 그 결과가 이쪽(파일명 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
    

    이 시점에서 10 줄을 가볍게 초과했습니다 ...

    5. 이 HTML 파일을 Ruby의 nokogiri로 퍼스하고 싶기 때문에 「Gemfile」라고 하는 것을 준비해 아래의 기술을 합니다.
    source 'https://rubygems.org'
    
    gem 'nokogiri'
    

    이 상태에서 터미널을 시작하고
    bundle install --path .bundle
    

    을 실행합니다.

    6. 설마 오류
    오랜만에 노기리를 넣으려고 하면 평소에 화가 나서...
    세상 뭐든지 생각대로 가는 것은 아닙니다.
    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--オプションを付けてインストール
    

    생각했지만 첫 번째 행을 실행했을 때 오류가 발생했습니다 ...
    Updating Homebrew...
    xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
    

    하지만 그 후의 처리가 끝났으므로 우선 무시하고 진행해 본다.
    → 다음 명령을 치면 좋지 않았기 때문에
    xcode-select --install
    

    여기 실행

    설치에 시간이 걸릴 것 같기 때문에 내일에 계속됩니다 ....

    좋은 웹페이지 즐겨찾기