C#中HTML/XML处理及正则表达式

来源:互联网 发布:淘宝店铺收藏地址 编辑:程序博客网 时间:2024/05/08 11:11

HTML Parser
一个比较方便的html解析package是HtmlAgilityPack,可以按照如下图显示在Visual Studio中安装。
这里写图片描述

使用该包的一个简单实例代码如下:

        public static bool CrawlCategoryReviewInfo(string categoryUrl)        {            var resp = HttpUtils.GetResponseData(categoryUrl);            if (resp == null)            {                logger.Info("Failed to request the category page from Suning server!");                return false;            }            HtmlDocument document = new HtmlDocument();            document.LoadHtml(resp);            HtmlNodeCollection collection = document.DocumentNode.SelectNodes("//div[@id='productTab']//li[contains(@class,'item')]");            if (collection == null || collection.Count < 1) return false;            foreach(HtmlNode prod in collection)            {                if (prod == null || prod.Attributes["name"] == null) continue;                string prodId = prod.Attributes["name"].Value;                if(prodId.StartsWith("000000000")) prodId = prodId.Substring(9);                HtmlNode commentNode = prod.SelectSingleNode(".//a[contains(@name,'comment')]/i");                if (commentNode == null) continue;                int commentCount = int.Parse(commentNode.InnerText);                Console.WriteLine(prodId + "\t" + commentCount);            }            if (collection.Count < int.Parse(ConfigurationManager.AppSettings["CAT_PAGE_ITEM_NUM"]))                return false;            return true;        }

需要特别注意的是,对于在HtmlNode内部找子HtmlNode所写的xpath,xpath需要在前面加上”.”,如上面的”.//a[contains(@name,’comment’)]/i”,否则可能会发现找的是全局的Node。

XML DOM
系统空间System.Xml.Linq中的XDocument可以帮助解析或者输出XML文件。
1) 加载解析XML:

            var filePath = Path.Combine(path, "image_status.xml");            XDocument doc = XDocument.Load(filePath);            var pics = doc.Descendants("pic");            foreach (var pic in pics)            {                string url = (string)pic.Element("url");                string imgFile = (string)pic.Element("file");                processedImages.Add(url, imgFile);            }

2) 保存生成XML

            var filePath = Path.Combine(path, "image_status.xml");            var docUpdate = new XElement("status");            foreach (var tuple in processedImages)            {                var item = new XElement("image");                item.Add(new XElement("url", tuple.Key));                item.Add(new XElement("file", tuple.Value));                docUpdate.Add(item);            }            docUpdate.Save(filePath);

正则表达式抽取
利用正则表达式来抽取信息,其实不同语言的逻辑都一样,语法略有不同。这里不做介绍,仅仅给出一个抽取的例子作为参考。注意每一个匹配部分会用”?<—>”开头来对该Group命名,后面取匹配的数据的时候就可以借助这个名字得到相应的匹配值。

        public static void CrawlProductReviewInfo()        {            string resp = "satisfy({\"reviewCounts\":[{\"oneStarCount\":2,\"twoStarCount\":0,\"threeStarCount\":23,\"fourStarCount\":43,\"fiveStarCount\":431,\"againCount\":4,\"bestCount\":0,\"picFlagCount\":5,\"totalCount\":499,\"qualityStar\":4.8}],\"returnCode\":\"1\",\"returnMsg\":\"成功获取评价个数\"})";            Regex revRegex = new Regex("\"totalCount\":(?<comment>.*?),\"qualityStar\":(?<score>.*?)}");             MatchCollection mc = revRegex.Matches(resp);            if (mc.Count > 0)            {                var comment = decimal.Parse(mc[0].Groups["comment"].Value);                var score = decimal.Parse(mc[0].Groups["score"].Value);            }        }
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝退货商家不同意退款怎么办 淘宝确认收货后卖家拒绝退款怎么办 淘宝卖家不同意退款怎么办 淘宝仅退款卖家不处理怎么办 淘宝申请退款卖家不处理怎么办 快递没收到货要退款怎么办 发票给了不给钱怎么办 付款后不给发票怎么办 供货商不给发票怎么办 刚生过孩子太胖买衣服怎么办 黑色牛仔裤洗的发白怎么办 蘑菇街手机丢了怎么办 黑衣服上全是白毛毛怎么办 支付宝注销了钱怎么办 网上买东西手机号写错了怎么办 二类工资卡过万怎么办 淘宝发货地址写错怎么办 淘宝发货地址写错了怎么办 淘宝不能代付了怎么办 支付宝付款码被盗刷怎么办 地方选举追究不到相关责任人怎么办 天正建筑画个直线找不到怎么办 Wi-Fi模块不支持多播怎么办? 魅族手机屏幕点不动怎么办 uc打开网页很慢怎么办 京东手机号码无法登录怎么办 织梦系统网站没收录怎么办 电脑开机出现一堆乱码怎么办 电脑文件夹出现乱码打不开怎么办 电脑出现f1和f2怎么办 电脑中韩文内容显示乱码怎么办 入驻shopee没身份证怎么办 液相色谱柱柱压降低怎么办 c18色谱柱堵了怎么办 色谱柱进空气了怎么办 宫颈评分只有3分怎么办 淘宝鞋子售后退货商家拒收怎么办 退货申通cp原因怎么办 运费险赔的少怎么办 淘宝卖游戏账号恶意退款怎么办 淘宝账号体检虚拟违规怎么办