2012-04-14 5 views
1

현재 다음 사이트 (Http://lulpix.com)를 방문하여 HTML을 파싱하고 다음에서 img src를 가져 오는 앱을 개발하고 있습니다. 내가 예를HTML 페이지에서 이미지 src을 파싱해야합니다.

로드 페이지> 구문 분석을 위해, 할 의도 무엇인가 다른 물론 이미지의 비동기 갤러리에 직접 URL을 줄 수 있도록 페이지가로드 될 때마다 섹션

<div class="pic rounded-8" style="overflow:hidden;"><div style="margin:0 0 36px 0;overflow:hidden;border:none;height:474px;"><img src="**http://lulpix.com/images/2012/April/13/4f883cdde3591.jpg**" alt="All clogged up" title="All clogged up" width="319"/></div></div> 

그 img src> 이미지 뷰에 ASync 다운로드> lulpix.com 다시 불러 오기> 다시 시작

그런 다음 사용자가 좌우로 스 와이프하여 탐색 할 수있는 이미지보기에 이들 각각을 배치합니다.

그래서이 TL은 HTML을 구문 분석하여 URL을 검색하고 이미지를 표시하는 데있어 libary에 대한 경험이있는 사람을 어떻게 찾을 수 있습니까?

감사합니다.

+0

JSoup을 사용하는 것을 고려해보십시오. "야생"에서 발견 된 HTML을 구문 분석하는 데 꽤 신뢰할 수있는 방법입니다. – Jens

+0

구문 분석 방법을 찾지 못하는 것 같지만 사용할 수있는 JSoup을 찾고있었습니다 – Broak

+0

좋아요. 나는 그것을 위로 채찍질 할 것이다, 그것은 매우 쉽다. – Jens

답변

3

lulpix에 연결하는 AsyncTask는 리퍼러 & 사용자 에이전트를 가짜로 만듭니다 (lulpix는 분명히 일부 절름발이 수표를 사용하여 스크래핑을 차단하려고합니다). 당신의 Activity이 같은 시작 :

결과 Bitmap은 (이미지가 이미 DL 경우 캐싱 또는 검사 : ED) 꽤 절름발이 방법으로 다운로드
new ForTheLulz().execute(); 

& 오류 처리가 전반적으로 꽤 존재하지 않는다 -하지만, 기본 개념은 괜찮을 것입니다.

class ForTheLulz extends AsyncTask<Void, Void, Bitmap> { 
     @Override 
     protected Bitmap doInBackground(Void... args) { 
      Bitmap result = null; 
      try { 
       Document doc = Jsoup.connect("http://lulpix.com") 
         .referrer("http://www.google.com") 
         .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6") 
         .get(); 
         //parse("http://lulpix.com"); 
       if (doc != null) { 
        Elements elems = doc.getElementsByAttributeValue("class", "pic rounded-8"); 
        if (elems != null && !elems.isEmpty()) { 
         Element elem = elems.first(); 
         elems = elem.getElementsByTag("img"); 
         if (elems != null && !elems.isEmpty()) { 
          elem = elems.first(); 
          String src = elem.attr("src"); 
          if (src != null) { 
            URL url = new URL(src); 
            // Just assuming that "src" isn't a relative URL is probably stupid. 
            InputStream is = url.openStream(); 
            try { 
             result = BitmapFactory.decodeStream(is); 
            } finally { 
             is.close(); 
            } 
          } 
         } 
        } 
       } 
      } catch (IOException e) { 
       // Error handling goes here 
      } 
      return result; 
     } 
     @Override 
     protected void onPostExecute(Bitmap result) { 
      ImageView lulz = (ImageView) findViewById(R.id.lulpix); 
      if (result != null) { 
       lulz.setImageBitmap(result); 
      } else { 
       //Your fallback drawable resource goes here 
       //lulz.setImageResource(R.drawable.nolulzwherehad); 
      } 
     } 
    } 
+0

참으로 도움이됩니다! 그러나 우리는 당신이 그것을 성공적으로 테스트 할 수 있습니까? 나는 때마다 null 결과를 얻는 것 같다 – Broak

+0

예. 결과 문서를 인쇄하려고하면 toString()은 서버로부터받은 것을 보여줍니다. – Jens

+0

나는 매우 어리 석다. 아하, 나는 그런 어리석은 실수를 저지르고, 모퉁이에서 모여 외치는 동안 나를 용서해. 아름답게 일하고있어, 대단히 감사합니다! – Broak

0

최근에 잘못된 HTML을 구문 분석하기 위해 JSoup을 사용했지만 제대로 작동합니다. 같은 것을하십시오 ...

Document doc = Jsoup.parse(str); 
    Element img = doc.body().select("div[class=pic rounded-8] img").first(); 
    String src = img.attr("src"); 

"선택자 문자열"을 사용하면 올바르게 작동하지만 위와 같을 것입니다. 먼저 class 속성의 값을 기초로 바깥 쪽 div을 선택한 다음 자손 img 요소를 선택합니다.

+0

이것은 정확히 내가 시도한 것이지만, 영구 NullPointerExeception * 한숨 *을 얻는다. – Broak

+0

표현이 맞지 않아야한다. "div [class = pic rounded-8]" – Torious

+0

'Jsoup '란 무엇입니까? –

관련 문제