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
- C#中HTML/XML处理及正则表达式
- c#中过滤html的正则表达式
- 正则表达式处理XML
- c# 处理正则表达式
- C# 处理html 标签一些正则表达式 整理收集
- C# 处理XML + XSLT转换中HTML元素的输出问题及解决
- 正则表达式处理xml标记
- 在C#中使用正则表达式过滤html字符
- C#中可以使用正则表达式来过滤html字符
- C#中利用正则表达式去除HTML中的格式
- C#中利用正则表达式去除HTML中的格式
- C# 正则表达式及常用正则表达式
- C#中正则表达式
- 【正则表达式】C#正则表达式提取HTML中IMG标签的URL地址
- 正则表达式相关:正则表达式处理html内容
- java正则表达式处理HTML标签
- C# 正则表达式过滤危险HTML
- C# 去掉HTML标记的正则表达式
- jQuery中$.fn的用法示例介绍
- Tomcat部署web应用的方式
- Android设计模式(十三)--状态模式
- eclipse快捷键及各种设置
- 如何找到专业学术期刊的“大牛”
- C#中HTML/XML处理及正则表达式
- 常用的ognl表达式
- 时间相关
- Android 数据查询query函数参数解析
- springmvc配置
- Core Animation研究系列 : CALayer中anchorPoint和position的用法
- PHP中func_get_args(),func_get_arg(),func_num_args()的区别
- Fix: Patch for Parallel Tools 9.0.23350 to support Linux Kernel 3.12 (Ubuntu 14.04)
- wifi信道