zoukankan      html  css  js  c++  java
  • 浅谈C#解析网页

    最近做了一个项目,要求获取各大主流网页上的关键信息,本人以前了解过网页爬虫的知识,所以想到了网页爬虫了实现功能

    第一次尝试:

    采用webclient获取远程网页的内容,然后采用正则表达式进行过滤

    但,由于正则表达式对我来说,书写起来比较复杂,研究个大半个月,一点进展都没有,每天看着正则表达式像看天书(回头需要向正则牛逼的人请教一下)

    第一次尝试失败,项目马上就要验收了,这个功能一直卡壳了,,,,,,,,

    突然有一次,在网上看到了有人提及到了HtmlAgilityPack这个开源的工具包,本想着试一下的态度(因为我对这个网页解析已经不抱有希望了)

    仅仅有了几行的代码,居然跟我的需求一样实现了,万分高兴(此处使用HtmlAgilityPack需要学习一下xpath的一点知识,不过那些都很简单,比起正则太easy了)

    好了,废话不多说,上代码

    1、去官网上下载一个HtmlAgilityPack包,地址:http://htmlagilitypack.codeplex.com/

    2、根据自己项目的.net版本,选择适合的版本,引入项目

    3、开始写代码了

    HtmlAgilityPack基本跟所有的类一样,直接使用里面的方法和属性就行,具体可以参考官网

    //获取网页指定内容
            public void GetHtml()
            {
                string htmlpath = "http://kaijiang.aicai.com/fcssq/";
                //创建对象
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                WebClient webclient = new WebClient();
                webclient.Credentials = CredentialCache.DefaultCredentials;//网络凭证
                Byte[] pageData = webclient.DownloadData(htmlpath);
               // string pagehtml = Encoding.Default.GetString(pageData); //默认编码
                string pagehtml = Encoding.UTF8.GetString(pageData);//UTF-8编码
    
                //用htmlagilitypack 解析网页内容
    
                //加载html
                doc.LoadHtml(pagehtml);
    
                //通过xpath 选中指定元素;xpath 参考:http://www.w3school.com.cn/xpath/xpath_syntax.asp
                HtmlAgilityPack.HtmlNode htmlnode = doc.DocumentNode.SelectSingleNode("//div[@id='jq_openResult']");
                StringBuilder sb = new StringBuilder();
                string s = "";
                
                HtmlAgilityPack.HtmlNodeCollection nodecollection = htmlnode.ChildNodes;
                for (int i = 0; i < nodecollection.Count; i++)
                {
                    if (nodecollection[i].InnerText.Trim()!="")
                    {
                        TextBox1.Text += nodecollection[i].InnerText + "-";
                        
                    }  
                }
                TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1);
                Console.WriteLine(s);
    
            }
    

    至此,HtmlAgilityPack就完全按照自己的要求解析出来了网页上的任何你想要的,是不是很神奇~~

  • 相关阅读:
    把字符串输入到表格里
    x 的 x 次方等于10,求 x
    java 中 二进制串与浮点数的相互转化
    堆栈 Objective-C NSString copy strong
    c一些学习过程中突然错过的细节
    视图控制器
    名词从句
    FastDFS
    Python
    http 提交表单数据
  • 原文地址:https://www.cnblogs.com/sguozeng/p/6828422.html
Copyright © 2011-2022 走看看