【问题标题】:How to extract text and images from html?如何从html中提取文本和图像?
【发布时间】:2011-08-12 05:11:54
【问题描述】:

我正在使用它来提取 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

编辑:源代码。

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]);

    }




}

}

我试过了,没用。也许我做错了什么。文本视图中没有显示文本。但是我在网页的调试中看到了一些标签。

【问题讨论】:

  • 查看我的编辑......我希望这是你想要的......

标签: android


【解决方案1】:

使用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): 这是一个时代的终结,哈利波特与死亡圣器 - 第 2 部分将于本周开幕,为史诗画上句号跨越八部电影和十年的电影系列。为了纪念这一时刻,我们决定重新审视该系列中的精彩角色,再次将我们的前 25 名排在前 25 位。自几年前我们首次运行此列表以来,您会注意到该列表的一些调整和变化,因为我们检查并重新评估了我们所看到的所有角色。在我们透露我们的选择之前,简单介绍一下选择过程......

【讨论】:

  • 我认为有一个.text() 方法。检查jsoup.org/apidocs/org/jsoup/nodes/Element.html#text()
  • 只要您指定了 url 并且 HTML 响应包含您在 .getElementsByTag(tag); 方法中指定的标签,代码就会产生结果。提取文本后,当然可以将其与 textview 一起使用。
  • 我猜你尝试获取主要文章,这是它的 html 标签&lt;div id="main-article-content"&gt;。在这种情况下,您可以使用 doc.getElementById(id) where id="main-article-content"; 或者另一个好的方法是使用 doc.getElementsByAttributeValue(key, value) where key="id"value ="main-article-content"
  • 是的,直截了当:D。 getElementById() [和其他类似方法] 只接受 String 类型的参数。
  • temp1 是字符串数组,因此您需要记录数组的所有元素,然后设置数组的所需元素,例如myTextView.setText(temp1[0]);[假设所需的内容在第一个temp1] 的位置。请记住,还有另一种方法可以做到这一点,我只是给你举了例子。
【解决方案2】:

你可以试试 JSoup 解析器。

http://jsoup.org/

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2023-03-21
    • 2014-07-31
    相关资源
    最近更新 更多