【问题标题】:Android HTML Parser ExampleAndroid HTML 解析器示例
【发布时间】:2011-08-17 14:05:12
【问题描述】:

我正在研究许多适用于 android 的 HTML 解析器。我尝试了很多图书馆。谁能告诉我一个例子如何做到这一点。我想提取每个标签的内容。请帮忙。我被这个困住了。

【问题讨论】:

    标签: android html-parsing


    【解决方案1】:

    请查看此列表。实际上,外面有很多选择。例如,我选择了 HtmlCleaner 库来实现。下面是一个使用示例:

    项目结构:

    实际源码:

    public class HtmlHelper {
        TagNode rootNode;
    
        public HtmlHelper(URL htmlPage) throws IOException
        {
            HtmlCleaner cleaner = new HtmlCleaner();
            rootNode = cleaner.clean(htmlPage);
        }
    
        List<TagNode> getLinksByClass(String CSSClassname)
        {
            List<TagNode> linkList = new ArrayList<TagNode>();
    
            TagNode linkElements[] = rootNode.getElementsByName("a", true);
            for (int i = 0; linkElements != null && i < linkElements.length; i++)
            {
                String classType = linkElements[i].getAttributeByName("class");
                if (classType != null && classType.equals(CSSClassname))
                {
                    linkList.add(linkElements[i]);
                }
            }
    
            return linkList;
        }
    }
    
    public class StackParser extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            Button button = (Button)findViewById(R.id.parse);
            button.setOnClickListener(myListener);
        }
    
        private ProgressDialog pd;
    
        private OnClickListener myListener = new OnClickListener() {
            public void onClick(View v) {
                pd = ProgressDialog.show(StackParser.this, "Working...", "request to server", true, false);
                new ParseSite().execute("http://www.stackoverflow.com");
            }
        };
    
        private class ParseSite extends AsyncTask<String, Void, List<String>> {
    
            protected List<String> doInBackground(String... arg) {
                List<String> output = new ArrayList<String>();
    
                try
                {
                    HtmlHelper hh = new HtmlHelper(new URL(arg[0]));
                    List<TagNode> links = hh.getLinksByClass("question-hyperlink");
    
                    for (Iterator<TagNode> iterator = links.iterator(); iterator.hasNext();)
                    {
                        TagNode divElement = (TagNode) iterator.next();
                        output.add(divElement.getText().toString());
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
    
                return output;
            }
    
            protected void onPostExecute(List<String> output) {
    
                pd.dismiss();
    
                ListView listview = (ListView) findViewById(R.id.listViewData);
                listview.setAdapter(new ArrayAdapter<String>(StackParser.this, android.R.layout.simple_list_item_1 , output));
            }
        }
    }
    

    【讨论】:

    • 感谢您的回复。这样可以获取html页面的所有标签吗?
    • 我试过这个程序,当我按下解析按钮时,我什么也没得到
    • 很抱歉再次打扰您。但我无法解压缩此文件。可以给我链接让我下载吗?
    • 我尝试使用这个项目但我有一个错误:Could not find class 'org.htmlcleaner.TagNode', referenced from method ru.habrahabr.stackparser.stackParser$parseSite.doInBackground。你能帮我解决吗?
    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2011-06-21
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多