2013-06-26 4 views
0

Я пытаюсь разобрать этот HTML с помощью jsoup.Проблема с разбором Html с помощью jsoup

Мой код:

doc = Jsoup.connect(htmlUrl).timeout(1000 * 1000).get(); 

      Elements items = doc.select("item"); 
      Log.d(TAG, "Items size : " + items.size()); 
      for (Element item : items) { 
       Log.d(TAG, "in for loop of items"); 

       Element titleElement = item.select("title").first(); 
       mTitle = titleElement.text().toString(); 
       Log.d(TAG, "title is : " + mTitle); 

       Element linkElement = item.select("link").first(); 
       mLink = linkElement.text().toString(); 
       Log.d(TAG, "link is : " + mLink); 

       Element descElement = item.select("description").first(); 
       mDesc = descElement.text().toString(); 
       Log.d(TAG, "description is : " + mDesc); 


      } 

Я получаю следующий вывод:

in for loop of items 
D/HtmlParser(6690): title is : Indonesian president: Some multinationals "take too much" 
D/HtmlParser(6690): link is : 
D/HtmlParser(6690): description is : April 23 - Indonesian President Susilo Bambang Yudhoyono tells a Thomson Reuters Newsmaker event that the country welcomes foreign investment in its resources sector, but must receive a "fair share" of benefits.<div class="feedflare"> <a href="http://feeds.reuters.com/~ff/reuters/audio/newsmakerus/rss/mp3?a=NX3AY96GfGk:hAtGeOq2ESs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/reuters/audio/newsmakerus/rss/mp3?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.reuters.com/~ff/reuters/audio/newsmakerus/rss/mp3?a=NX3AY96GfGk:hAtGeOq2ESs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/reuters/audio/newsmakerus/rss/mp3?i=NX3AY96GfGk:hAtGeOq2ESs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.reuters.com/~ff/reuters/audio/newsmakerus/rss/mp3?a=NX3AY96GfGk:hAtGeOq2ESs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/reuters/audio/newsmakerus/rss/mp3?i=NX3AY96GfGk:hAtGeOq2ESs:F7zBnMyn0Lo" border="0"></img></a> </div><img src="http://feeds.feedburner.com/~r/reuters/audio/newsmakerus/rss/mp3/~4/NX3AY96GfGk" height="1" width="1"/> 

Но я хочу, как выход:

in for loop of items 
D/HtmlParser(6690): title is : Indonesian president: Some multinationals "take too much" 
D/HtmlParser(6690): link is : http://feeds.reuters.com/~r/reuters/audio/newsmakerus/rss/mp3/~3/KDcQe4gF-3U/62828262.mp3 
D/HtmlParser(6690): description is : April 23 - Indonesian President Susilo Bambang Yudhoyono tells a Thomson Reuters Newsmaker event that the country welcomes foreign investment in its resources sector, but must receive a "fair share" of benefits. 

Что я должен изменить в своем коде?

Как достичь моей цели. Пожалуйста, помогите мне!!

Благодарим вас заранее!

ответ

0

Есть 2 проблемы в rss контент, который вы получили.

  1. link текст не в <link/> тег, но за его пределами.
  2. Содержание escaped html в теге description.

PFB модифицированный код.

Также я нашел некоторое чистое содержание html при просмотре URL в Browser, которое при анализе упростит извлечение желаемых полей. Вы можете достичь этой настройки userAgent как Browser в Jsoup. Но вам решать, как получить контент.

doc = Jsoup.connect("http://feeds.reuters.com/reuters/audio/newsmakerus/rss/mp3/").timeout(0).get(); 
    System.out.println(doc.html()); 
    System.out.println("================================"); 
    Elements items = doc.select("item"); 
    for (Element item : items) { 

     Element titleElement = item.select("title").first(); 
     String mTitle = titleElement.text(); 
     System.out.println("title is : " + mTitle); 

     /* 
     * The link in the rss is as follows 
     * <link />http://feeds.reuters.com/~r/reuters/audio/newsmakerus/rss/mp3/~3/NX3AY96GfGk/59621707.mp3 
     * which doesn't fall in the <link> element but falls under <item> TextNode 
     */ 
     String mLink = item.ownText(); // 
     System.out.println("link is : " + mLink); 

     Element descElement = item.select("description").first(); 
     /*Unescape the html content, Parse it to a doc, and then fetch only the text leaving behind all the html tags in content 
     * "/" is a dummy baseURI passed, as we don't care about resolving the links within parsed content. 
     */ 
     String mDesc = Parser.parse(Parser.unescapeEntities(descElement.text(), false),"/").text(); 
     System.out.println("description is : " + mDesc); 

    } 
+0

Wow !!! Хорошо работать ... !!! Спасибо! 1 – Dhasneem

+0

Не могли бы вы заглянуть в эту ссылку http://stackoverflow.com/questions/17316659/unable-to-get-image-url-from-rss-feed-using-jsoup – Dhasneem