
안녕하세요 ^^
구글링해가면서 크기가 작고 단순(?)한 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 용량때문에 그런줄 알았는데
로그가 일번 하고 육번만 뜨는걸 보니까 아예 못가져오는것 같은데 왜그런건가요?ㅠ