Nokogiri는 selector를 이용해 웹페이지의 정보를 가져올 수 있게 해줍니다. 링크를 타고 가면서 크롤링 하는 것을 원할 경우엔, Mechanize를 사용하세요.

Nokogiri gem 설치

gem install nokogiri

설치 오류시

limbiconv error는 nokogiri tutorial 참고 libxml이 없는 경우엔 설치

brew install libxml

xz 오류시 workaround nokogiri-issue-1483

brew uninstall xz

요약

doc = Nokogiri::HTML(open(url))

#CSS selector로 찾기
doc.css('nav ul.menu li a', 'article h2').each do |link|
    # attributes
    puts link.attributes["id"].value if link.attributes["id"]
    
    puts link.content
end

한글 인코딩 문제

wolfapple

doc = Nokogiri::HTML(open('http://blog.naver.com/xxxx', 'r:binary').read.encode('utf-8', 'euc-kr'))

한글 인코딩 시 간혹 euc-kr encoding으로 처리할 수 없는 문자가 있는 경우가 있다. :invalid, :undef 옵션을 주면, error를 방지하고, encoding되지 않는 문자를 ‘?’로 바꾼다. Justin Weiss

doc = Nokogiri::HTML(open('http://blog.naver.com/xxxxx', 'r:binary').read.encode('utf-8', 'euc-kr', invalid: :replace, undef: :replace))

XML 파싱시

XML 파싱 할 때는, HTML 함수를 쓰지마세요.

doc = Nokogiri::XML(open(url))