如何从HTML中提取文本和图像?

时间:2011-08-10 16:48:54

标签: android

我使用它来提取SPAN标签并告诉它有多少。

ublic class HtmlparserExampleActivity extends Activity {
String outputtext;
  TagFindingVisitor visitor;
  Parser parser = null;
private static final String TAG = "TVGuide";

private static final boolean D = true;

TextView outputTextView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);




     outputTextView = (TextView) findViewById(R.id.outputTextView);


    if(D) Log.e(TAG, "+++ ON CREATE +++");


    try {
        Log.e(TAG, "In doInBackground");

        parser = new Parser ("http://www.johandegraeve.net/android");

            String tags[] = { "SPAN" };

          visitor = new TagFindingVisitor(tags);

            try {

                parser.visitAllNodesWith (visitor);

                outputtext =  "there are " + visitor.getTags(0).length + " SPAN nodes.\n";

                for (int i = 0;i<visitor.getTags(0).length;i++) {

                    outputtext = outputtext + visitor.getTags(0)[i].toHtml();  


                }

              outputTextView.setText(outputtext);

            } catch (ParserException e) {

                if(D) Log.e(TAG, "Exception in +++ ON CREATE +++ \n" +

                        "parser.visitAllNodesWith (visitor) failed\n" +

                        e.toString());

            }

    } catch (ParserException e1) {

        if(D) Log.e(TAG, "Exception in +++ ON CREATE +++ \n" +

                "creation of parser failed\n" +

                e1.toString());

}         }

}

如何更改此内容以获取文本和图像,并在其wigdets中仅显示文本和图像?使用此代码?

编辑:像这样的html页面的标签是什么来获取文本和图像URL?

http://movies.ign.com/articles/100/1002569p1.html

EDIt:源代码。

public class HtmlparserExampleActivity extends Activity {
String outputtext;
  TagFindingVisitor visitor;
  Parser parser = null;
private static final String TAG = "TVGuide";



TextView outputTextView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    outputTextView = (TextView)findViewById(R.id.outputTextView);
    String id = "main-article-content";
    Document doc = null;

    try {
        doc = Jsoup.connect("http://movies.ign.com/articles/100/1002569p1.html").get();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Log.i("DOC", doc.toString().toString());
    Elements elementsHtml = doc.getElementsByTag(id);  
    String[] temp1 = new String[99];;
    int i =0;
    for(Element element: elementsHtml)
    {

        temp1 = element.text();
        i++;
        outputTextView.setText(temp1[1]);

    }




}

}

我试过这个,它没有用。也许我做错了什么。 textview中没有显示任何文字。但我在网页的调试中看到了一些标签。

2 个答案:

答案 0 :(得分:4)

使用JSoup解析器并按tag解析元素。对于这些小型解析,JSoup非常高效和简单。

编辑:我不知道你的情况,但我会试一试:

Document doc = Jsoup.connect("someurl").get();
        Log.i("DOC", doc.toString().toString());
        Elements elementsHtml = doc.getElementsByTag("tr");  <--- here you specify the html tag where is the text is located
        String[] temp1 = new String[99];    
        int i =0;
        for(Element element: elementsHtml)
        {

            temp1[i] = element.text();
            i++;

        }
//After you have collected all the elements, you set the textview

更多:转到您想要的页面并查看页面源,您可以在那里搜索您想要的内容,然后查看您要使用的标签/类/ ID。

我已经为你解析了HTML:

try{
        Document doc = Jsoup.connect("http://movies.ign.com/articles/100/1002569p1.html").get();

        Elements elementsHtml = doc.getElementsByAttributeValue("id", "main-article-content");

        for(Element element: elementsHtml)
        {
            Log.i("PARSED ELEMENTS:",URLDecoder.decode(element.text(), HTTP.UTF_8));
                 outputTextView.setText(element.text());


        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是您要解析的文字吗?

08-11 21:08:02.095:INFO / PARSED ELEMENTS(200):这是一个时代的结束,正如哈利波特与死亡圣器 - 第二部分本周开启一样,结束了史诗电影系列已经跨越八部电影和十年。为了纪念这一场合,我们决定再看一下这个系列中的精彩人物,再次排名前25位。自从我们几年前第一次运行它以来,你会注意到这个列表的一些调整和更改,如同我们检查并重新评估了我们所见过的所有角色。在我们揭示我们的选择之前,请快速了解选择过程...

答案 1 :(得分:1)

您可以尝试JSoup解析器。

http://jsoup.org/