1、使用第三方类库 HtmlAgilityPack

官方网址:https://html-agility-pack.net/?z=codeplex、

// From File 从文件获取html信息vardoc =newHtmlDocument();doc.Load(filePath);
// From String 从字符串获取html信息vardoc =newHtmlDocument();doc.LoadHtml(html);
// From Web 从网址获取html信息varurl ="http://html-agility-pack.net/";varweb =newHtmlWeb();vardoc = web.Load(url);

1.1、这里介绍一下最后一种用法

varweb =newHtmlWeb();
vardoc = web.Load(url);

web中我们还可以设置cookie、headers等信息,来处理一些特定的网站需求,比如需要登陆等。

1.2 用法解释

网页在你查看网页源代码之后只是一段字符串,而爬虫所做的就是在这堆字符串中,查询到我们想要的信息,挑选出来。
以往的筛选方法:正则 (太麻烦了,写起来有些头疼)
HtmlAgilityPack 支持通过XPath来解析我们需要的信息。

1.2.1 在哪里找XPath?

网页右键检查

通过XPath就可以准确获取你想要元素的全部信息。

1.2.2 获取选中Html元素的信息?

获取选中元素


varweb =newHtmlWeb();vardoc = web.Load(url);varhtmlnode = doc?.DocumentNode?.SelectSingleNode("/html/body/header")

获取元素信息

htmlnode.InnerText;htmlnode.InnerHtml;//根据属性取值htmlnode?.GetAttributeValue("src","未找到")

2、自己封装的类库


///<summary>///下载HTML帮助类///</summary>publicstaticclassLoadHtmlHelper{///<summary>///从Url地址下载页面///</summary>///<param name="url"></param>///<returns></returns>publicasyncstaticValueTask<HtmlDocument>LoadHtmlFromUrlAsync(stringurl){HtmlWeb web =newHtmlWeb();returnawaitweb?.LoadFromWebAsync(url);}
///<summary>///获取单个节点扩展方法///</summary>///<param name="htmlDocument">文档对象</param>///<param name="xPath">xPath路径</param>///<returns></returns>publicstaticHtmlNodeGetSingleNode(thisHtmlDocument htmlDocument,stringxPath){returnhtmlDocument?.DocumentNode?.SelectSingleNode(xPath);}
///<summary>///获取多个节点扩展方法///</summary>///<param name="htmlDocument">文档对象</param>///<param name="xPath">xPath路径</param>///<returns></returns>publicstaticHtmlNodeCollectionGetNodes(thisHtmlDocument htmlDocument,stringxPath){returnhtmlDocument?.DocumentNode?.SelectNodes(xPath);}

///<summary>///获取多个节点扩展方法///</summary>///<param name="htmlDocument">文档对象</param>///<param name="xPath">xPath路径</param>///<returns></returns>publicstaticHtmlNodeCollectionGetNodes(thisHtmlNode htmlNode,stringxPath){returnhtmlNode?.SelectNodes(xPath);}

///<summary>///获取单个节点扩展方法///</summary>///<param name="htmlDocument">文档对象</param>///<param name="xPath">xPath路径</param>///<returns></returns>publicstaticHtmlNodeGetSingleNode(thisHtmlNode htmlNode,stringxPath){returnhtmlNode?.SelectSingleNode(xPath);}
///<summary>///下载图片///</summary>///<param name="url">地址</param>///<param name="filpath">文件路径</param>///<returns></returns>publicasyncstaticValueTask<bool>DownloadImg(stringurl ,stringfilpath){HttpClient httpClient =newHttpClient();try{varbytes =awaithttpClient.GetByteArrayAsync(url);using(FileStream fs = File.Create(filpath)){fs.Write(bytes,0, bytes.Length);}returnFile.Exists(filpath);}catch(Exception ex){thrownewException("下载图片异常", ex);}}}

3、自己写的爬虫案例,爬取的网站https://www.meitu131.com/

数据存储层没有实现,懒得写了,靠你们喽,我是数据暂时存在了文件中
GitHub地址:

https://github.com/ZhangQueque/quewaner.Crawler.git

我自是年少,韶华倾负。

出处:

https://www.cnblogs.com/ZhangQueque/archive/2020/12/20/14163406.html



版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。

收藏 打印