루비온 레일즈 웹크롤링할 때 이미지와 텍스트를 뽑아올 때 질문입니다.

조회수 1625회

웹을 공부하는 학생입니다. 항상 여기서 도움을 많이 받고 있습니다. 제가 텍스트따로 이미지 따로 추출하는 것은 해보았는데 여기서 궁금하게 있습니다. 예를 들면 신문기사를 크롤링할 때 텍스트 이미지 텍스트 순으로 기사가 배열이 되어있을 때 이 순서를 잃지 않고 추출하려면 어떻게 해야하나요?

제가 크롤링하고자 하는 코드는 아래와 같습니다. 보시면 아시겠지만 텍스트 이미지 텍스트 이미지 텍스트 순으로 되어있습니다.

<div id="articleBodyContents">
    <!-- 본문 내용 -->

    구글이 마치 레고처럼 모듈 방식으로 기능을 추가할 수 있는 조립식 스마트폰 `아라`의 개발자 버전 실물을 올해 가을에 내놓고 내년부터 판매한다는 계획을 내놨다. LG전자가 선보인 G5에 이어 `아라`까지 가세해 조립형 스마트폰 생태계가 확장될 전망이다.<br /><br />블레이즈 베르트랑 구글 고급 기술과 제품(ATAP) 부문의 창의 책임자(Head of Creative)는 연례 개발자 회의 `구글 I/O 2016`의 마지막 날인 20일(현지시간) 올해 4분기 프로젝트 아라 개발자용 새 스마트폰이 나올 예정이라 밝혔다. 2017년에는 소비자에게도 판매될 것이라 덧붙였다.<br /><br />
<span class="end_photo_org"><img src="http://imgnews.naver.net/image/030/2016/05/22/804126_20160522135644_339_0001_99_20160522184806.jpg?type=w540" /><em class="img_desc">
구글의 조립형 스마트폰 아라/사진=연합뉴스</em></span><br />5.3인치의 아라 스마트폰은 각종 모듈을 탈부착할 수 있는 6개의 슬롯이 있다. LG전자의 G5는 하단부 모듈만 교체 가능한 반면, 조립PC처럼 스피커와 고성능 카메라 등의 부품을 입맛대로 끼울 수 있는 방식이다. 차세대 아라 프레임이 나오더라도 호환이 가능하다.<br /><br />
<span class="end_photo_org"><img src="http://imgnews.naver.net/image/030/2016/05/22/804126_20160522135644_339_0002_99_20160522184806.jpg?type=w540" /><em class="img_desc">구글이 공개한 모듈 스마트폰 프로젝트 `아라` 이미지</em></span><br />구글은 그동안 프로젝트 `아라(ARA)`를 앞세우며 사이트에 소프트웨어개발키트(SDK)를 공개했다. 여러 개발자들이 모듈 개발에 참여할 수 있도록 한 것이다. 프로젝트 `아라`는 2012년 비밀 프로젝트로 시작돼 2013년에 선보였다. 지난 해 일부 부품이 선보였으나 그간 제품 실물이 나오지 않았다가 올해 들어서야 구체적인 청사진을 제시하게 됐다.<br /><br />함지현기자 goham@etnews.com <span style="display: block; font-size:14px;">[Copyright ⓒ 전자신문 & 전자신문인터넷, 무단전재 및 재배포 금지]</span></span>
    <!-- // 본문 내용 -->
    </div>

아래는 제가 짠 코드들입니다. 컨트롤러

 def index

        require 'open-uri'
        require 'nokogiri'



        @img_urls = Array.new 
        @table_hsh = Array.new

        @url ="http://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=030&aid=0002480868"
        @page = Nokogiri::HTML(open(@url), nil, 'EUC-KR')

        @title = @page.search("title").text

        @title_edit = @title.split(':')[0]
        @content = @page.css('#articleBodyContents').text
        @img_urls = @page.css('.end_photo_org img').map{|i| i['src']}

        @table_hsh << {:imgs => @img_urls }

    end

<h1>Title</h1>
<%= @title_edit %>

<h1>Article Contents</h1>
<%= @content %>


<h1>Image</h1>
<table>
    <tr>
        <% @table_hsh.each do |row| %>
          <% i = 0 %>
            <% row[:imgs].each do |img_url| %>
             <td> <img src=<%=img_url %>, width="500" , height="400"> </img></td>
            <% i = i + 1 %>
          <% end %>
        <% end %>
    </tr>
</table>

제가 원하는 것은 아래와 같은 형식으로 제가 크롤링하는 사이트의 HTML코드를 유지하면서 크롤링하는 것입니다. 항상 도움을 많이 받고 있습니다. 감사합니다.

이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • child=@content.children;
    

    와 같이 하면 @content의 자식 노드들을 하나씩 분리해서 읽어올 수 있습니다.

    올려주신 코드를 통해 보면 23개의 child가 있고, 각각의 name을 출력해 보면(child.each {|c| puts c.name}) 아래와 같이 나온는데요. 필요한 child만 뽑아서 사용하시면 되겠네요.

    text
    comment
    text
    br
    br
    text
    br
    br
    span
    br
    text
    br
    br
    span
    br
    text
    br
    br
    text
    span
    text
    comment
    text
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)