마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

구글 이미지 검색 결과 파싱

0 추천

 

안녕하세요 ^^

구글링해가면서 크기가 작고 단순(?)한 xml 같은경우엔 파싱 할수 있겠는데..

제가 원하는건 구글 이미지 검색결과페이지를 파싱해서 그 사진들을 가져오는 것입니다.

페이지 소스를 보니 <div class="rg_meta"> 이 녀석이 각 사진에 대한 정보를 가지고 있더군요..

그 정보들 중에서 ou(빨간박스)가 사진 url 입니다.

우선 <div class="rg_meta">의 전체 텍스트라도 파싱해서 리스트 뷰에 뿌려줄려고 하는데 

파싱이 잘안되는것 같습니다;

전체 코드는 http://javaking75.blog.me/140191738356 여기를 참고했고 제가 수정한부분은


url을 view-source:https://www.google.co.kr/search?q=%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C&biw=950&bih=934&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjDucDcjMfLAhWC2KYKHQtiD7oQ_AUIBigB
(구글 안드로이드 이미지 검색결과) 

하고 원본코드에서 아래처럼 바꿨습니다 (description은 상관없지만 코드삭제는 안했습니다)


    //실제사이트에 접속해서 데이터를 추출하는 부분
    @Override
    protected Void doInBackground(Void... params) {
        try {
            //안드로이드에서 xml문서를 읽고 파싱하는 객체를 선언
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            //네임스페이스 사용여부
            factory.setNamespaceAware(true);
            //실제 sax형태로 데이터를 파싱하는 객체 선언
            XmlPullParser xpp = factory.newPullParser();
            //웹사이트에 접속
            url = new URL(uri);
            //웹사이트를 통해서 읽어드린 xml문서를 안드로이드에 저장
            InputStream in = url.openStream();
            //xml문서를 일고 파싱하는 객체에 넘겨줌
            xpp.setInput(in,"UTF-8"); //xml문서의 인코딩 정확히 지정

            //item 태그를 안이라면
            boolean isInItemTag = false;
            //이벤트 타입을 얻어옴
            int eventType = xpp.getEventType();
            //문서의 끝까지 읽어 드리면서 title과 descripton을 추출해냄
            while(eventType != XmlPullParser.END_DOCUMENT){
                Log.d("뭐냐","일번");
                if(eventType==XmlPullParser.START_TAG){
                    //태그명을 읽어드림
                    tagname = xpp.getName();
                    Log.d("뭐냐","이번");

                    if(tagname.equals("div")&&xpp.getAttributeValue(null,"class").equals("re_meta") ){
                        isInItemTag = true;
                        Log.d("뭐냐","삼번");
                    }

                }else if(eventType==XmlPullParser.TEXT){
                    //태그명이 title이거나 또는 description일때 읽어옴
                    Log.d("뭐냐","사번");
                    if(tagname.equals("div")&&isInItemTag&&xpp.getAttributeValue(null,"class").equals("re_meta")){
                        title += xpp.getText(); //text에 해당하는 모든 텍스트를 읽어드림 ( += )
                    }else if(tagname.equals("description")&&isInItemTag){
                        description += xpp.getText();
                    }
                }else if(eventType==XmlPullParser.END_TAG){
                    //태그명을 읽어드림
                    tagname = xpp.getName();

                    //endtag일경우에만 벡터에 저장
                    if(tagname.equals("item")){
                        //벡터에 저장
                        titlevec.add(title);
                        descvec.add(description);

                        //변수 초기화
                        title="";
                        description="";

                        isInItemTag = false;
            Log.d("뭐냐","오번");
                    }//if-------

                }//if----------
                //다음 이벤트 다입을 저장
                eventType = xpp.next();
            }//while---------

            //모든 데이터가 저장되었다면.
            flag=true; //true : 지정된 xml파일을 읽고 필요한 데이터를 추출해서 저장 완료된 상태


        } catch (Exception e) {
        Log.d("뭐냐","육번");
        }
        return null;
    }//doInBackground()------------

}

 이렇게 하니 빈화면 밖에 안뜹니다 ㅜ 이게 첨엔 xml 용량때문에 그런줄 알았는데
로그가 일번 하고 육번만 뜨는걸 보니까 아예 못가져오는것 같은데 왜그런건가요?ㅠ

껄껄앱 (1,910 포인트) 님이 2016년 3월 17일 질문

1개의 답변

0 추천
1. 결과가 xml이 아니므로 xml 파서를 쓰면 안됩니다. html 파서를 사용하세요.

2. PC에서의 결과와 모바일기기에서의 결과가 다를 수 있습니다.
익명사용자 님이 2016년 3월 17일 답변
...