Nokogiri에서 DOM 스티커

6494 단어 domRubyNokogiri
비망록이지만 뭔가 도움이 된다면 공개할 수 있을 것 같아.주로 DOM의 클립입니다.대상은 노코지리로 퍼즐을 맞출 수 있는 사람이다.커튼에 사용하고 싶은 사람은 복잡하게 뒤엉킨 예가 많이 나오기 때문에 이렇게 어려운 필기를 읽어도 시간이 낭비되지 않는다
메모인 만큼 수시로 내용 수정과 추가를 진행한다.

차리다


자주 사용하는bundler설치nokogiri물건입니다.
  • 적절한 디렉토리 생성 및 이동
  • 필요하면 rbenv나 루비 버전으로 어떻게 해요
  • $ bundle init에서 Gemfile
  • 생성
  • Gemfile 끝에 gem "nokogiri"
  • 더하기
  • $ bundle install --path=.bundle/vendor/bundle
  • 이제 Nokogiri가 설치되어 사용됩니다.다음은 초기 코드입니다.
    #!/usr/bin/env ruby
    require 'bundler'
    Bundler.setup(:default, :ci)
    require 'nokogiri'
    
    RAW_HTML = DATA.read # __END__ の次行から末尾まで読み込む
    
    def get_document
      Nokogiri::HTML(RAW_HTML, nil, 'utf-8')
    end
    
    __END__
    <html>
    <head>
    <title>hello</title>
    </head>
    <body>
    <p>hello</p>
    <p id="foo">goto <a href="https://qiita.com">Qiita</a> site!</p>
    </body>
    </html>
    
    이후문서에서 생성Nokogiri::HTML::Document한 후에 코드의 예를 들어 보십시오.하나하나 재생성하는 것은 소개하는 방법이 거의 파괴적인 방법이기 때문이다.__END__ 전에 코드 예시를 기입해 주십시오.

    예제


    내용의 변경

    doc = get_document
    doc.at_css('title').content = 'new title'
    puts doc.at_css('title') # => '<title>new title</title>'
    
    # #foo の子供の最初のノード (goto ) を書き換える
    doc.at_css('#foo').children[0].content = 'this is '
    puts doc.at_css('#foo') # => '<p id="foo">this is <a href="https://qiita.com">Qiita</a> site!</p>'
    
    그러나 Nokogiri::XML::Text#content= 라벨이 달린 문자열을 건네줘도 도망갈 수 있다.

    방법 css와atcss에 대한 차이


    자주 잊어버리기 때문에 스크랩 측 얘기다.CSS 선택기가 노드(요소)를 지정하는 두 가지 방법1이 있습니다.
    doc = get_document
    p doc.css('p').map{|x| x.to_s} # => ["<p>hello</p>", "<p id=\"foo\">goto <a href=\"https://qiita.com\">Qiita</a> site!</p>"]
    puts doc.at_css('p').to_s # => <p>hello</p>
    
    중요한 것은
  • Nokogiri::XML::Searchable#css 모든 관련 요소 나열
  • Nokogiri::XML::Searchable#at_css 조건에 부합되는 첫 번째 원소
  • 를 되돌려줍니다
    그러니까id 속성으로 꺼낼 때 문서에 하나밖에 없기 때문에 at_css로 꺼내는 것이 좋습니다.

    특정 요소의 컨텐츠를 완벽하게 교체

    doc = get_document
    doc.at_css('#foo').children.unlink
    doc.at_css('#foo') << '<span>new text</span>'
    puts doc.at_css('#foo') # => '<p id="foo"><span>new text</span></p>'
    
    여기에 라벨을 사용할 수 있습니다.참고로 Nokogiri::Node#<< 방법은 요소 내용의 끝에 부가된다.그래서 첫 줄이 없으면...의 후면〜.children.unlink에 요소를 삽입합니다.해보면 알 것 같아서요.

    참고 문헌


  • Module: Nokogiri 주요 자료일 수 있음
  • xpath에서 지정한 방법이 있는 것 같지만 사용해 본 적이 없습니다. 

    좋은 웹페이지 즐겨찾기