Net Core 基于AngleSharp的HTML转实体工具
最近这几天在采集一些房产信息网站的二手房产数据。采用的是.net core 2.2+AngleSharp做的,放在自己服务器上跑着玩。写着写着,发现好麻烦。原因如下
部分代码如下图
1、每个节点都要手动写代码采集;
2、要采集的数据可能是内容,也可能是属性;
3、还要特殊处理一些字符,例如去除一些 平米、万、m²、等等等等;
于是,就想着,如果有一个工具,我只需要将要采集的属性标记一下,仍给你html内容,你给我组装好的实体。多好。
以下是一个DEMO 类
1 [HtmlNode(Selector = ".sellListContent li", IsSingle = false)] 2 public class FangJia 3 { 4 /// <summary> 5 /// 标题 6 /// </summary> 7 [HtmlNode(Selector = ".title", ValueFrom = HtmlNode.Content)] 8 public string Title { get; set; } 9 10 /// <summary> 11 /// 图片地址 12 /// </summary> 13 [HtmlNode(Selector = "img[class='lj-lazy']", ValueFrom = HtmlNode.Attribute, AttributeValue = "data-original")] 14 public string ImageUrl { get; set; } 15 16 /// <summary> 17 /// 价格 18 /// </summary> 19 [HtmlNode(Selector = ".unitPrice", ValueFrom = HtmlNode.Attribute, AttributeValue = "data-price")] 20 public int Price { get; set; } 21 22 /// <summary> 23 /// 总价 24 /// </summary> 25 [HtmlNode(Selector = ".totalPrice", ValueFrom = HtmlNode.Content, TrimCharacter = "万,元", IsSingle = true)] 26 public decimal Total { get; set; } 27 28 /// <summary> 29 /// 小区名称 30 /// </summary> 31 [HtmlNode(Selector = ".positionInfo a", Index = 1, ValueFrom = HtmlNode.Content)] 32 public string CommunityName { get; set; } 33 34 /// <summary> 35 /// 地址 36 /// </summary> 37 [HtmlNode(Selector = ".positionInfo a", Index = 2, ValueFrom = HtmlNode.Content)] 38 public string Address { get; set; } 39 40 /// <summary> 41 /// 标签 42 /// </summary> 43 [HtmlNode(Selector = ".tag span", IsSingle = false, ValueFrom = HtmlNode.Content)] 44 public string Marks { get; set; } 45 46 public override string ToString() 47 { 48 return $"{CommunityName}\t{Price}\t{Total}\t{Address}\t{Title}\t{ImageUrl}\t{Marks}"; 49 } 50 }
简单说一下
Selector 要采集的样式选择器,子节点是按照相对于主节点路径的选择器,按照 AngleSharp 标准来的。网上资料很多就不再多说;
IsSingle 是否只有一个节点,默认为 true,true只采集第一个有效节点,false 将采集所有节点数据,虽然可能只返回一条;
ValueFrom 要采集的数据来源,有 Content(文字内容),Html(html内容),Attribute(属性),None(不采集);
AttributeValue 从那个属性中获取内容,当 ValueFrom 为 Attribute 时有效;
Index 要选择的节点 从1 开始,默认为1,当 IsSingle 为 false 时无效;
TrimCharacter 要去除的字符,多个用","分割,采集时将会去除的内容;
测试程序
1 static void TestHtmlToEntity() 2 { 3 var html = HttpClient.Get("https://hz.lianjia.com/ershoufang/xihu/", null, out var success, 10); 4 5 6 var entitys = html.ToList<FangJia>(); 7 if (entitys != null) 8 foreach (var entity in entitys) 9 Console.WriteLine(entity); 10 }
运行结果如下,数据已正常采集
代码地址:https://gitee.com/sunnyfish/HtmlToEntity
AngleSharp 官网 https://anglesharp.github.io/
github 地址 https://github.com/AngleSharp/AngleSharp
不会飞的鱼~~~~梦想总要有的,万一实现了呢!
尊重他人劳动成功。转载请注明出处! http://www.cnblogs.com/flyfishing/
尊重他人劳动成功。转载请注明出处! http://www.cnblogs.com/flyfishing/