LightTable에서 Ruby, Nokogiri를 사용하여 실시간 처리
7840 단어 LightTableRuby
실시간 Excel 퍼스(Light Table의 사용법 제2장) - Qita라는 기사를 읽고 난 뒤에도 커튼에 잘 어울리는 것 같아서 루비, 노코기리로 해봤어요.
설치 시 클로저, 파이톤, 자바스크립트 등은 REPL 기능을 사용할 수 있지만 루비는 포함되지 않는다.REPL은 Rubby에서 플러그 인을 설치하여 사용할 수 있습니다.
환경 준비
플러그인 설치
Ctrl + Space
에 명령 트레이를 표시하고 Plugins: Show plugin manager
에서 Ruby Instarepl을 설치합니다.
Ruby Instarepl에 대한 자세한 내용은 다음을 참조하십시오.
설치 후
App: Reload Behaviors
명령을 실행하고 다시 로드합니다.(Light Table를 다시 시작할 수도 있음)
Gem 설치
Ruby Instarepl 설치에 필요한 Gem.
$ gem install eventmachine
$ gem install json
$ gem install method_source
겸사겸사 스크레이퍼에 미리 설치하여 사용Nokogiri.$ gem install nokogiri
Windows 7 64비트로 자체 환경을 구축했습니다.DevKit에 가입해야 하고, 이벤트machine은 들어가지 않고, nokogiri는 들어가지 않는 등 번거롭기 때문에 참고 정도의 링크를 붙여야 합니다.코드를 쓰다
REPL 기능 테스트
작업 공간에서 적당한 이름으로 폴더를 만들고 코드를 씁니다.이번에는 qita에서 자신이 저장한 투고를 봉쇄해 보았다.
코드를 쓰기 전에 설치된 플러그인 기능을 사용하십시오.
명령 트레이에서 Ruby Instarepl: Toggle live mode
를 선택합니다.
라이브 모드가 유효하면 코드를 쓸 때식이 평가된다.
라이브 모드가 무효이거나 평가가 좋지 않으면Ctrl + Enter
이 줄을 평가할 수 있다.
대단해!편리합니다!!
커튼 인코딩
Instarepl을 사용하여 코드를 만드는 방법과 실제 코드를 만들 때의 절차에 대해 설명한다.doc = Nokogiri::HTML.parse(html, nil, charset)
를 통해 모든 원소를 얻을 수 있습니다.Instarepl을 시작했기 때문에 다음 요소의 내용이 표시됩니다.
이어 크롬의 디벨로퍼 툴스에서 DOM을 확인하고 자크리doc.xpath('//div[@class="activities"]')
로 요소를 꺼내 봤다.
화면에 이 부분이야.
Light Table은 다음과 같습니다.
이후 확인doc.xpath('//div[@class="activities"]').length
중 1건만 취득했고, 내용과 DOM을 보고 변경doc.xpath('//div[@class="activities"]/article')
했다.
스케줄러:정말 전부밖에 못 받았네요!
일단 .length
표시 건수를 더하면 20으로 나와 보도 요소 취득 여부를 확인할 수 있다.
20개의 제목을 표시하고 싶지만, 우선 1개로 시도해 보세요.
실제로 .first
에서 하나를 얻었고, .css('h1')
에서 제목 부분을 얻었고, .inner_text
에서 텍스트를 표시하고... 조금씩 시도했다.Instarepl에 표시된 코드가 깨져서 puts
콘솔에 출력합니다.
마지막으로 20편의 문장 요소를 포함하는 대상(Nokogiri:XML::::Nodeset)에 대해 each에 각각의 제목을 표시하면 완성됩니다.(첫 페이지만 했지만...)
마지막 코드는 다음과 같다.Proxy 환경에서 진행되기 때문에 설정이 있지만 필요하지 않으면 삭제할 수 있습니다.require 'open-uri'
require 'nokogiri'
# proxy設定
proxy = "http://YOUR_PROXY:8080"
proxy_user = "PROXY_USER"
proxy_pass = "PROXY_PASS"
options = { proxy_http_basic_authentication: [proxy, proxy_user, proxy_pass] }
# スクレイピング先のURL
url = 'http://qiita.com/tenten0213/stock'
charset = nil
html = open(url, options) do |f|
charset = f.charset
f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)
doc.xpath('//div[@class="activities"]/article').each do |node|
puts node.css('h1').inner_text
end
평소 irb와 pry 등으로 값과 대상을 확인하면서 코드를 쓰지만, 라이트테이블을 사용하면 IDE에서 동시에 진행하기 편하다.
이번처럼 홈페이지에 낙서하거나 참고한 글처럼 엑셀 퍼스를 하면 수치를 확인하면서 코드를 쓸 수 있어 편리하다고 생각한다.
편하신 분들은 꼭 해보세요.
Reference
이 문제에 관하여(LightTable에서 Ruby, Nokogiri를 사용하여 실시간 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tenten0213/items/5f7f103da8f6569697f6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
require 'open-uri'
require 'nokogiri'
# proxy設定
proxy = "http://YOUR_PROXY:8080"
proxy_user = "PROXY_USER"
proxy_pass = "PROXY_PASS"
options = { proxy_http_basic_authentication: [proxy, proxy_user, proxy_pass] }
# スクレイピング先のURL
url = 'http://qiita.com/tenten0213/stock'
charset = nil
html = open(url, options) do |f|
charset = f.charset
f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)
doc.xpath('//div[@class="activities"]/article').each do |node|
puts node.css('h1').inner_text
end
Reference
이 문제에 관하여(LightTable에서 Ruby, Nokogiri를 사용하여 실시간 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tenten0213/items/5f7f103da8f6569697f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)