使用C#+XPath+HtmlAgilityPack轻松搞一个资源下载器
程序员文章站
2022-04-14 18:13:01
HtmlAgilityPack简介 HtmlAgilityPack是一个开源的解析HTML元素的类库,最大的特点是可以通过XPath来解析HMTL,如果您以前用C#操作过XML,那么使用起HtmlAgilityPack也会得心应手。目前版本更新的是非常的快,最新更新时间还是19年的呢! XPath介 ......
htmlagilitypack简介
htmlagilitypack是一个开源的解析html元素的类库,最大的特点是可以通过xpath来解析hmtl,如果您以前用c#操作过xml,那么使用起htmlagilitypack也会得心应手。目前版本更新的是非常的快,最新更新时间还是19年的呢!
xpath介绍
xpath即为xml路径语言,它是一种用来确定xml(标准通用标记语言的子集)文档中某部分位置的语言。xpath基于xml的树状结构,提供在数据结构树中找寻节点的能力。起初 xpath 的提出的初衷是将其作为一个通用的、介于xpointer与xsl间的语法模型。但是 xpath 很快的被开发者采用来当作小型查询语言。
具体代码
using system; using system.collections.generic; using system.linq; using system.text; using system.threading.tasks; using htmlagilitypack; using system.io; using system.net; namespace datagridviewdemo { public class httphelper { static readonly string urltemplate = "http://yun.java1234.com/search?page={0}&q={1}"; public static list<bdwpresource> request(string key, string start) { string url = string.format(urltemplate, key, start); httpwebrequest httprequest = (httpwebrequest)webrequest.create(url); httprequest.accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"; httprequest.useragent = "mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/69.0.3497.100 safari/537.36"; try { htmlweb webclient = new htmlweb(); htmldocument doc = webclient.load(url); if (doc != null) { //加载文档对象 { var content = doc.documentnode.selectsinglenode("/html/body/div[2]/div[3]/div/div/div[2]/ul"); if (content != null) { list<bdwpresource> list = new list<bdwpresource>(); var targetli = content.selectnodes(@"li"); foreach (var item in targetli) { list.add(new bdwpresource() { title = item.selectsinglenode("span[1]/a").innertext, unescapedurl = "http://yun.java1234.com/" + item.selectsinglenode("span[1]/a").attributes["href"].value.trim(), content = item.selectsinglenode("span[2]").innertext.trim() }); } return list; } } return null; } else { return null; } } catch { return null; } } } }
效果图
下一篇: 工厂模式讲解, 引入Spring IOC