程序员兴趣站建成记 我爱篮球网

    我是2012年夏毕业,到现在正式工作刚满一年,在这一年中也取得了一定进步。公司主要从事.net网站开发,我们都用的是MVC,参与了几个大型的项目,企业站也做了几个。

    每天对着电脑的工作也许不是我想要的,我也算一个坐不住的人,我爱好篮球,目前唯一的爱好了,经常看NBA,就萌生了自己建一个有关NBA的网站了,可是工作中,自己只写C#代码,几乎不写html和js,就硬着头皮写了写,很丑,但目前想要的功能还是实现了。

    说说网站实现吧,网站用MVC开发,数据库是mysql,NBA网站最重要的是数据,数据跟新很快,自己也没那个精力慢慢往网站里填数据,那就得抓数据了,利用WebClient抓取网站内容。

        /// <summary>
        /// 获取内容
        /// </summary>
        private static string GetPageContent(Uri uri, Encoding encoding)
        {
            WebClient webclient = new WebClient();
            try
            {
                webclient.Encoding = encoding;
                return webclient.DownloadString(uri);
            }
            catch
            {
                return string.Empty;
            }
            finally
            {
                webclient.Dispose();
            }
        }

  获取网站的内容后,解析网站结构,利用正则表达式获取自己需要的数据,网上找到一个类,利用正则解析html字符串的,参考了http://www.cnblogs.com/lucc/archive/2010/05/18/1738718.html这篇博客。

        /// <summary>
        /// 在文本html的文本查找标志名为tagName,并且属性attrName的值为attrValue的所有标志
        /// 例如:FindTagByAttr(html, "div", "class", "demo")
        /// 返回所有class为demo的div标志
        /// </summary>
        public static List<HtmlTag> FindTagByAttr(String html, String tagName, String attrName, String attrValue)
        {
            String format = String.Format(@"<{0}\s[^<>]*{1}\s*=\s*(\x27|\x22){2}(\x27|\x22)[^<>]*>", tagName, attrName, attrValue);
            return FindTag(html, tagName, format);
        }

        public static List<HtmlTag> FindTag(String html, String name, String format)
        {
            Regex reg = new Regex(format, RegexOptions.IgnoreCase);
            Regex tagReg = new Regex(String.Format(@"<(\/|)({0})(\s[^<>]*|)>", name), RegexOptions.IgnoreCase);

            List<HtmlTag> tags = new List<HtmlTag>();
            int start = 0;

            while (true)
            {
                Match match = reg.Match(html, start);
                if (match.Success)
                {
                    start = match.Index + match.Length;
                    Match tagMatch = null;
                    int beginTagCount = 1;

                    while (true)
                    {
                        tagMatch = tagReg.Match(html, start);
                        if (!tagMatch.Success)
                        {
                            tagMatch = null;
                            break;
                        }
                        start = tagMatch.Index + tagMatch.Length;
                        if (tagMatch.Groups[1].Value == "/") beginTagCount--;
                        else beginTagCount++;
                        if (beginTagCount == 0) break;
                    }

                    if (tagMatch != null)
                    {
                        HtmlTag tag = new HtmlTag(name, match.Value, html.Substring(match.Index + match.Length, tagMatch.Index - match.Index - match.Length));
                        tags.Add(tag);
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }

            return tags;
        }

  获取数据后,接着就是入库了。接着就是前台展示。网站建成http://www.5ailanqiu.com

posted @ 2013-05-30 09:46  小菜?大神?  阅读(185)  评论(0编辑  收藏  举报