51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> asp.net >> 文章正文

Html代码如何检查闭合并修复

更新时间:2015-7-3:  来源:51代码网

这样的,网上抓取了些网站的html代码保存到数据库中,现在很多抓下来的html代码里面只有开头标记,没有结束,有没有方法可以解决?
比如:<div><p>asdfsadfsadfsafsaf</p>       这里就没有结束的</div>标签,当然不只是<div>标签,各种没成对,忘提供好的方法

private void button1_Click(object sender, EventArgs e)
        {
 //需要解析的集合
            List<string> list = new List<string>();
 Loop("http://www.lwfree.com",listCount);
}
 /// <summary>
        /// 读取Html
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        static string ReadHtml(string url)
        {
            //WebRequest request = WebRequest.Create(url);
            throw new NotImplementedException();
            //最终返回结果
        }
 
        /// <summary>
        /// 解析A标签对应的链接字符串
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        static List<string> GetLinks(string html)
        {
            throw new NotImplementedException();
        }
 
        static void Loop(string url)
        {
            string html = ReadHtml(url);
            //html 处理
            List<string> urls = GetLinks(html);
            if (urls != null && urls.Count > 0)
            {
                urls.ForEach(u =>
                {
                    Loop(u);
                });
            }
        }

// <summary>
        /// 读取Html
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
         string ReadHtml(string url)
        {
            WebClient MyWebClient = new WebClient();
 
            MyWebClient.Credentials = CredentialCache.DefaultCredentials;//获取或设置用于向Internet资源的请求进行身份验证的网络凭据
 
            Byte[] pageData = MyWebClient.DownloadData(url); //从指定网站下载数据
 
            return Encoding.UTF8.GetString(pageData); //如果获取网站页面采用的是UTF-8,则使用这句
        }
 
        /// <summary>
        /// 解析A标签对应的链接字符串
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
         List<string> GetLinks(string html)
        {
            List<string> lst = new List<string>();
            //解析
            Regex regex = new Regex(@"<a[^>]*href=([""'])?(?<href>[^'""]+)\1[^>]*>");
            foreach (Match mc in regex.Matches(html))
            {
                string url = GetNewUrl(mc.Groups[2].Value);
                if (!string.IsNullOrEmpty(url))
                {
                    lst.Add(url);
                }
            }
 
            return lst;
        }
 
         void Loop(string url, List<string> listCount)
        {
             //没有解析过该项
            if (!listCount.Contains(url))
            {
                //在已解析过的集合里面添加本条数据
                listCount.Add(GetNewUrl(url));
                string html = ReadHtml(url);
                //html 处理
                List<string> urls = GetLinks(html);
                if (urls != null && urls.Count > 0)
                {
                    urls.ForEach(u =>
                    {
                        lsbSuccess.Items.Add(url);
                        Loop(u, listCount);
                    });
                }
            }
        }

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |