총 게시물 934건, 최근 0 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[웹]

홈페이지 태그 div 내 a 태그 속성 가져오기

글쓴이 : 브루스웨인 날짜 : 2017-02-20 (월) 17:46 조회 : 1450
글주소 : http://www.androidside.com/B49_best/12687
 
  BIA검사 튼튼마디프로로의원
BIA검사, 체성분검사, 세포건강지수, 암극복, 대장암, 췌장암, 유방암, 폐암
blog.naver.com/prolo7
  아동 중고책 전문 개똥이네
입체북특가 판매, 새책같은 중고책 최대80%,당일무료배송
www.littlemom.co.kr/
  아동도서 대여전문 리틀코리아
입체북대여, 유아, 아동도서 대여판매, 당일무료배송
www.littlekorea.kr
신청하기


이미지_23.png



저 alt에 있는 텍스트를 가져오고 싶은데요


현재

Document doc = Jsoup.connect("http://www.cgv.co.kr/culture-event/event/?menu=2#1").get(); //웹에서 내용을 가져온다.
Elements contents = doc.select("div.evt-item-lst"); //내용 중에서 원하는 부분을 가져온다.
text = contents.toString(); //원하는 부분은 Elements형태로 되어 있으므로 이를 String 형태로 바꾸어 준다.

System.out.println(text);
div.evt-item-lst 까지 가져왔는데 내부 내용이 없습니다.
파싱하면 <div class="evt-item-lst"></div> 이렇게만 파싱이 되거든요
저 내부에 있는 텍스트를 가져오려면 어떻게 select을 해야하는지 잘 모르겠습니다.
다양하게 문법을 써봤는데도 나오질 않아서요..
하위 태그를 가져오려고
div.evt-item-lst > a#tile_2 
이런식으로 해봤는데 나오질 않네요.jsoup해보신 분 계신가요?




브루스웨인 님의 개발 Q&A FAQ 최신글 [더보기]


질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

OSKiller 2017-02-20 (월) 21:11
jquery로 하면요?
댓글주소 추천 0 반대 0
암페타민 2017-02-21 (화) 11:15
E/body: <div id="evtList"> 
         <article id="art_event_seq_4369" class="event_box event_seq_4369"> 
          <a href="javascript:goDetail('http://m.cgv.co.kr/Event/2017/0215_GreatWall/?seq=4369&amp;iPage=1', '4369');"> 
           <div class="img_look"> 
            <img src="http://img.cgv.co.kr/WebApp/contents/eventV4/4369/mobile_b_600X400.jpg" alt="[그레이트 월]<br/>포토티켓 무료 쿠폰 증정" onerror="this.src='http://img.cgv.co.kr/WebApp/images/common/noimg_600x400.jpg'" /> 
           </div> 
           <div class="txt_look inBgColor" style="background-color:#E39705;"> 
            <em class="stit">Special</em> 
            <strong class="tit">[그레이트 월]<br />포토티켓 무료 쿠폰 증정</strong> 
            <span class="refer">2017.02.16 ~ 2017.03.05</span> 
            <span class="btn_participate">지금참여</span> 
           </div> </a> 
         </article> 

doc.select("#evtList").toString()
로 했을때 내용인데
그냥 없어서 못가져 오나 봅니다. 웹 소스 다시 확인해보셔야 할듯
댓글주소 추천 0 반대 0
     
     
브루스웨인 2017-02-21 (화) 12:33
[@암페타민] 아 표시는 되는데 없어서 못가져오는 케이스인가요?? 웹소스는 저거말고도 다른걸 볼 수가 있나요? 개발자 도구로 보는게 전부엿습니다.

그리고 다시 보고 있었는데 id가 evtList 라는 요소가 있나요? 찾아봐도 없어서요
댓글주소 추천 0 반대 0
          
          
암페타민 2017-02-21 (화) 13:47
[@브루스웨인]

웹은 ajax통신으로 페이지 로딩 후 데이터를 가저오는 방식이 존재하기 때문에 데이터가 로딩이 끝났다고 존재한다고 볼 수 없습니다.

<div class="evt-info" >
<span class="count">
영화/예매 이벤트가 <strong>16건</strong>이 있습니다.
</span>
</div>
<div class="sect-event">
<div class="box-event">
<div class="evt-item-lst">
</div>
</div>
</div>
<button type="button" class="btn-itemmore" id="btnMoreData">
<strong>더보기</strong>
<span>(<em>&nbsp;</em>/<i>&nbsp;</i>)</span>
</button>

상위 소스는 크롬에서 소스보기 시 보이는 소스이며 페이지 로딩 후 ajax나 비동기 통신방식으로 데이터를 가져오는것으로 보입니다.
그래서 초기엔 데이터가 없고 그대로 긁어온 android에서도 데이터를 가져올 수 없는거겠죠.
댓글주소 추천 0 반대 0
               
               
브루스웨인 2017-02-21 (화) 14:28
[@암페타민] 헛 그런 방식도 있었군요.. 찾아보니 자바스크립트로 파싱하는 방법이 있는데 안드로이드에서 자바스크립트를 불러와서 파싱하는 방법을 찾아봐야겠군요
댓글주소 추천 0 반대 0
                    
                    
암페타민 2017-02-21 (화) 14:55
[@브루스웨인]ajax주소를 직접 찾거나 저 데이터가 어디서 오는지 알수있다면 데이터를 얻을 "수" 도 있지만 대부분의 ajax는 리퀘스트에 의해 필요한 곳에서만 부르도록 막고있고 파싱으로만 데이터를 가져오는것은 저 웹사이트가 어떻게 변할지(아이디, 클레스값)모르기 때문에 추천하지도 않습니다.ㅎ
결론은... 저 회사에서 api를 제공하지 않으면 만들기 힘들다는거져....
댓글주소 추천 0 반대 0
                         
                         
브루스웨인 2017-02-21 (화) 15:33
[@암페타민] ㅠㅠ 그렇군요 상세한 설명 감사합니다. 
댓글주소 추천 0 반대 0
정직한놈 2017-02-21 (화) 16:12
덧붙여서 허접한 놈이 한마디 적자면
ajax는 백단에서 뭔가를 처리하기 때문에 Fiddler라는 놈을 설치해서 디버깅하시면 도움이 될거구요

 evtLIst라는 아이디 object를 읽지 못하는 경우는 div태그가 잘못닫혀있거나 그럴때 저 object를 못찾는 경우가 발생할수 있습니다.
더불어 
<script type="text/javascript">
..
doc.select("#evtList").toString()
,..
</script>
이런 형태가 아니라
<script type="text/javascript">
$(function(){  
여기서 해당 오브젝트를 갖고 오는 형태로 취해야 하며
}); 
</script>
이렇게 하는게 더 바람직스러워 보입니다.


댓글주소 추천 0 반대 0
     
     
브루스웨인 2017-02-21 (화) 18:01
[@정직한놈]
피들러로 찾아보니

저 목록들이

                <div class="evt-item-lst">
                </div>
            </div>
        </div>
          
        <button type="button" class="btn-itemmore" id="btnMoreData">
<strong>더보기</strong>
  <span>(<em>&nbsp;</em>/<i>&nbsp;</i>)</span> 
</button> 
        중략....
.
.


              $("#event_region").val("");
            $("#event_region").change();
            $("#event_theater").val("");

            $("#search").on("click", function(){
                location.href = "/culture-event/event/?menu=2&regioncode=" + $("#event_region").val() + "&theatercode=" + $("#event_theater").val();
            });
             
            var jsonData = [{"idx":15638,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0221/(240X200______CGV_web_banner.jpg","link":"./detail-view.aspx?idx=15638&menu=2","description":"<존 윅-리로드>팬심 저격 퀴즈 이벤트"},{"idx":15627,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0221/240x200.jpg","link":"./detail-view.aspx?idx=15627&menu=2","description":"<용을 찾아서> 1+1 예매 이벤트"},{"idx":15626,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0220/240x200.jpg","link":"./detail-view.aspx?idx=15626&menu=2","description":"<슬립리스: 크리미널 나이트> 기대평 경품 이벤트"},{"idx":15624,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0220/CGV_240x200(1).jpg","link":"./detail-view.aspx?idx=15624&menu=2","description":"<루시드 드림> 앵콜 1+1 예매 이벤트"},{"idx":15622,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0220/CGV_240x200.jpg","link":"./detail-view.aspx?idx=15622&menu=2","description":"<루시드 드림> 예매 경품 이벤트"},{"idx":15617,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0217/(240X200)CGV_web_banner.jpg","link":"./detail-view.aspx?idx=15617&menu=2","description":"<존 윅-리로드> 예매 경품 이벤트"},{"idx":15612,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0216/240x200(4).jpg","link":"./detail-view.aspx?idx=15612&menu=2","description":"<구름의 저편, 약속의 장소> GV 스페셜 이벤트"},{"idx":15606,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0216/240x200(1).jpg","link":"./detail-view.aspx?idx=15606&menu=2","description":"<조작된 도시> 1+1 앵콜 이벤트 "},{"idx":15603,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0215/(240X200)CGV_web_banner_sample.jpg","link":"./detail-view.aspx?idx=15603&menu=2","description":"<더 큐어> 예매 경품 이벤트"},{"idx":15602,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0215/240x200_01.jpg","link":"./detail-view.aspx?idx=15602&menu=2","description":"<재심> 관람평 경품 이벤트트"},{"idx":15600,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0214/240x200(4).jpg","link":"./detail-view.aspx?idx=15600&menu=2","description":"<명탐정 코난: 에피소드 원-작아진 명탐정> 예매 경품 이벤트"},{"idx":15598,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0214/240x200(3).jpg","link":"./detail-view.aspx?idx=15598&menu=2","description":"<맨체스터 바이 더 씨> 예매 경품 이벤트"},{"idx":15590,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0213/240x200(2).jpg","link":"./detail-view.aspx?idx=15590&menu=2","description":"<마이펫 오지> 스페셜 예매 경품 이벤트"},{"idx":15585,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0213/240x200.jpg","link":"./detail-view.aspx?idx=15585&menu=2","description":"[싱글라이더] 스타★라이브톡"},{"idx":15557,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0209/yourname_240x200.jpg","link":"./detail-view.aspx?idx=15557&menu=2","description":"<너의 이름은.> 예매 경품 이벤트"},{"idx":15539,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0207/greatwall_240x200.jpg","link":"./detail-view.aspx?idx=15539&menu=2","description":"<그레이트 월> 스페셜 이벤트"},{"idx":15519,"imageUrl":"http://img.cgv.co.kr/Event/Event/2017/0203/(240X200)CGV_web_banner.jpg","link":"./detail-view.aspx?idx=15519&menu=2","description":"<라이언> cgv only 상영작 특가 이벤트"}]; 
            $(".evt-item-lst").tileGalleryEvent({
                "type": "event",
                "data": jsonData,
                "listHeights": [180, 140, 45],
                "leftMargins": [17, 289, 557],
                "imageMargin": 20,
                "limit": callLimit(),
                "imageWidth" : 240,
                "callback" : function() {
                    var currhash = window.location.hash.substring(1); 
                    var hash = getCookie("Hash");
                    
                    if(currhash == "") {
                        currhash = 1;
                    } 
                    else {

                        if (hash == '') {
                            currhash = Number(currhash) + 1;
                        }
                        else {
                            currhash = Number(hash);
                        }


이렇게 되어있네요 이걸 파싱해야된다는 말씀이시죠?
댓글주소 추천 0 반대 0
정직한놈 2017-02-23 (목) 10:40
이해가안되는군요..ajax로 데이타를 리딩해서 갖고 오는거 아닌가요?

댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기