xml地图|网站地图|网站标签 [设为首页] [加入收藏]

net下使用HAP实现的吉大校园通知网爬虫工具,网

来源:http://www.ccidsi.com 作者:集成介绍 人气:129 发布时间:2019-05-07
摘要:明天刚初阶做毕设....好呢,的确某些晚。小编的毕设设计需求爬取豆瓣的电影和电视推荐,于是就须求分析爬取下来的html,以前用Python玩过解析,但如今自己利用的是C#,我觉得C#不及

明天刚初阶做毕设....好呢,的确某些晚。小编的毕设设计需求爬取豆瓣的电影和电视推荐,于是就须求分析爬取下来的html,以前用Python玩过解析,但如今自己利用的是C#,我觉得C#不及python差,有微软大大在,那几个无需操心,首要依然生态难题。查了下资料,发掘Html Agility Pack是相比好的,当然还有其余的,我就隐瞒了,首要行使它做的。

简介

  以后更进一步多的气象须求大家选拔网络爬虫,抓取相关数据便宜大家运用,今日大家要讲的中坚Html Agility Pack是在爬取的进度个中,能够异常快的剖析大家抓取到的html数据。

 

    官方网站地址(可以友善去下载dll):

优势

  在.NET技巧下,解析html工具也诸多,例如很两个人或然会利用htmlparser,也许微软的MSHTML,htmlparser固然相比较易上手,但是相对应的辨析速度不快,而Html Agility Pack解析速度十三分快,并且开源,易用,它可以帮忙我们解析html文书档案就如用XmlDocument类来解析xml同样自在、方便。

  传送门:官方网址地址,Github开源代码地址

本文为大大维原创,最早于博客园揭橥,转发请注脚出处!!!

    

办法介绍

  其实Html Agility Pack的类不是多多益善,我们解析Html的时候,用到的也就HtmlDocument和HtmlNode(还有HtmlNodeCollection会集类)那多少个类。官方网站也有相对应的API文书档案表明,其实真正是粗略易懂,传送门:API文档

Question 一、如何加载Html?

  HtmlDocument类定义; 多个重载Load方法来完毕不一样方法的Html加载,主要常见的有二种办法;从文件加载、从字符串加载、从网页链接加载。

  示例:

 1 // 从物理路径的文件加载
 2 var doc = new HtmlDocument();
 3 doc.Load(filePath);//文件路径
 4 
 5 // 从Stream当中加载
 6 var doc = new HtmlDocument();
 7 doc.LoadHtml(html);
 8 
 9 // 从网页的Url链接加载
10 var url = "http://www.cnblogs.com/xuliangxing/";
11 var web = new HtmlWeb();
12 var doc = web.Load(url);

  以Stream对象为主的重载方法:

(1)public void Load(Stream stream)    ///从指定的Stream对象中加载html;
(2)public void Load(Stream stream, bool detectEncodingFromByteOrderMarks)    ///指定是否从顺序字节流中解析编码格式
(3)public void Load(Stream stream, Encoding encoding)    ///指定编码格式
(4)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks)
(5)public void Load(Stream stream, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)  ///缓冲区大小

  以钦定的物理路线为主的重载方法:

(1)public void Load(string path)
(2)public void Load(string path, bool detectEncodingFromByteOrderMarks)    ///指定是否从顺序字节流中解析编码格式
(3)public void Load(string path, Encoding encoding)    ///指定编码格式
(4)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks)
(5)public void Load(string path, Encoding encoding, bool detectEncodingFromByteOrderMarks, int buffersize)

 Question 贰、怎么样精准定位到大家须要的数据

  今年大家须求动用HtmlNodeCollection和HtmlNode这三个类,大家把Html种种标签看作1个Node,全数大家想到定位到某些标签的内容,就须求通晓那一个标签的有关属性。顺便说一下,HtmlNode类实现了IXPathNavigable接口,那申明了它能够透过xpath来恒定数据了,要是你对解析XML格式数据的XmlDocument类精通的话,尤其是应用过了SelectNodes()和SelectSingleNode()方法的人的话,对应用HtmlNode类将会很了然。其实Html Agility Pack内部是把html解析成xml文书档案格式了的,所以援救xml中的一些常用查询格局。上边通过简单示例对HtmlNode的片段要害的常用成员作简要的辨证。

  就以本身和讯主页为例,希望我们在此基础上可见融会贯通,这里只做投石问路,分界面图如下:

网上皇家赌场网址 1

  后台Html代码,作者抓取了有的代码拿来做示范

 1 <!DOCTYPE html>
 2 <html lang="zh-cn">
 3 <head>
 4 <meta charset="utf-8"/>
 5 <meta name="viewport" content="width=device-width, initial-scale=1" />
 6 <title>法号阿兴 - 博客园</title>
 7 </head>
 8 <body>
 9 <div id="home">
10 <div id="header">
11     <div id="blogTitle">
12     <a id="lnkBlogLogo" href="http://www.cnblogs.com/xuliangxing/"><img id="blogLogo" src="/Skins/customlogo.gif" alt="返回主页" /></a>            
13     <h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/xuliangxing/">法号阿兴</a></h1>
14     <h2>你的能力还驾驭不了你的目标时,就应该沉下心来历练</h2>
15     </div>   <!--end: blogTitle 博客的标题和副标题 -->
16     <div id="navigator">
17 <ul id="navList">
18     <li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">博客园</a></li>
19     <li><a id="blog_nav_myhome" class="menu" href="http://www.cnblogs.com/xuliangxing/">首页</a></li>
20     <li><a href="http://news.cnblogs.com/">新闻</a></li>
21     <li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">新随笔</a></li>
22     <li><a id="blog_nav_contact" accesskey="9" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/法号阿兴">联系</a></li>
23     <li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">管理</a></li>
24     <li><a id="blog_nav_rss" class="menu" href="http://www.cnblogs.com/xuliangxing/rss">订阅</a>
25     <a id="blog_nav_rss_image" class="aHeaderXML" href="http://www.cnblogs.com/xuliangxing/rss"><img src="//www.cnblogs.comxml.gif" alt="订阅" /></a></li>
26 </ul>
27 </div><!--end: header 头部 -->
28 <div id="main"></div><!--end: 正文 -->
29 <div id="footer"></div><!--end: 底部 -->
30 </div>
31 </body>
32 </html>

  一般Html最广大的是div标签元素,它大概会定义一些品质,比例本文在这之中的<div id="blogTitle">,某个不是id属性,是class属性,那个依照真实意况而定,要灵活变通

(1)通过ID属性(恐怕别的品质)来选拔相应的节点

  通用格式:@id=‘xxxx’(id能够是此外品质等等),比如我们要定位到本文物博物客主页的标题和副标题内容。

1 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
2 doc.LoadHtml(url)//博客主页URL
3 //下面的意思是:通过属性id的值,来定位header下的blogTitle节点信息
4 HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//div[@id='header']/div[@id='blogTitle']");

  大家还能不通过质量id去稳固,还有通过索引去定位,如下所示,这些效应和上边是1致的:

1 //下面的意思是:通过索引定位,div[2]是表示根节点的第二个
2 HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//div[2]/div[1]");

  备注:注意路线里"//"表示从根节点开始查找,多少个斜杠‘//’表示查找全体childnodes;3个斜杠'/'表示只查找第壹层的childnodes(即不查找grandchild);点斜杠"./"表示从眼下结点而不是根结点起先查找。大家随后上边titleNode节点,查找自个儿新浪的ID。

1 //下面的意思是:通过当前titleNode节点,获取便签h1的节点
2 HtmlNode IDNode = titleNode.SelectSingleNode("./h1");

  讲授了上面那些,我们应该早就能够明白了Html Agility Pack的骨干使用方式,那么怎么样一遍性获得博主的ID呢?

1 HtmlNode IDNode = doc.DocumentNode.SelectSingleNode("//div[@id='header']/div[@id='blogTitle']/h1");

(二)怎么样收获节点文本内容

  接着下边(一)所说的,通过代码“HtmlNode IDNode = doc.DocumentNode.SelectSingleNode("//div[@id='header']/div[网上皇家赌场网址,@id='blogTitle']/h一") ”获取到了IDNode的节点,那么接下去,我们须求如此获取具体的文本值呢(即博主ID)?有二种办法获取OuterHtml,InnerHtml和InnerText。

  HtmlNode类设计了OuterHtml属性和InnerHtml属性用于获取当前节点的Html源码。两者分裂之处是,OuterHtml属性重临的是含有当前节点的Html代码在内的持有Html代码,而InnerHtml属性再次来到的是当下节点里面子节点的装有Html代码,InnerText属性过滤掉了独具的Html标志代码,只回去文本值。具体用哪一种方法,要依附大家实在情状而定,一般InnerHtml和InnerText使用的频率比较多。如下所示:

1 //我们获取博客ID
2 IDNode.OuterHtml ///返回结果是:<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/xuliangxing/">法号阿兴</a></h1>
3 IDNode.InnerHtml ///返回结果是:<a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/xuliangxing/">法号阿兴</a>
4 IDNode.InnerText ///返回结果是:法号阿兴

(三)怎么着获得节点属性值

  即使大家地点Html数据当中,博主博客地址,在标签<div id="header">里的<a>标签里,这年就须要使用HtmlNode下的Attribute属性了。

1 string url = doc.DocumentNode.SelectSingleNode("//div[@id='header']/div[@id='blogTitle']/a").Attributes["href"].Value;

 (4)怎样赢得有些标签的享有节点

   大家假诺获得后面Html数据的li所有分类,那一年须要利用办法SelectNodes了

HtmlNodeCollection uiListNodes = doc.DocumentNode.SelectNodes("//ui[@id='navList']/li");

 Question 三、Html Agility Pack实行删除操作

  Html Agility Pack是可以对Html做去除操作的,具体的能够参考官方网址的API,这里大家讲下最广泛

 (1)如何去掉外层的html tag只留下文本内容**

  回到我们刚刚上边讲到的地方,用remove方法。假若要去除上文结点<a id="Header1_HeaderTitle" class="headermaintitle" href=" Tag如果该节点叫Node:

Node.ParentNode.RemoveChild(Node,true); 

  参数true表示留下grandchild,在此间即博主博客ID内容; false代表将此结点连同其grandchilds一同删除。

  越来越多的措施我们能够到官方网站的API文档进行通晓,这里就不做更多的注脚。

 PS:如有疑问,请留言,未经允许,不得违法转发,转发请申明出处:

网上皇家赌场网址 2

网上皇家赌场网址 3

 

 

    参考:Html Agility Pack基础类介绍及应用

第一章 简介

正文主要介绍了在.NET下利用卓绝的HTML解析组件HtmlAgilityPack开采的1个吉少将内布告oa.jlu.edu.cn的爬取器。就算.Net下解析HTML文件有繁多样选项,包罗微软乎乎睦也提供MSHTML用于manipulate HTML文件。可是,经过自家多边查阅资料和融洽的尝试,Html Agility Pack稳步横空出世:它是Stackoverflow网址上引入最多的C# HTML解析器。HAP开源,易用,解析速度快。由此,本身最后选取使用HAP作为爬虫的开拓的HTML解析组件。

小编完结的爬虫OAWebScraping能够兑现由使用者钦命时间的(从当下时光往前n天)的,对oa.jlu.edu.cn上的全部全部布告和音信,包罗时间、标题、公布部门、正文全文和附属类小部件的爬取,并且依照时间->发布部门->标题->正文及附属类小部件的树形结构将爬取的文件保留在硬盘中。以下是运用截图:

始发爬虫,输入爬取的时光限定:

 网上皇家赌场网址 4

爬取成功,对于从未发放布告的日期给予提醒:

 网上皇家赌场网址 5

文件的团协会结构:

 网上皇家赌场网址 6

爬取的文件根据树形结构

时光->宣布部门->标题->正文及附属类小部件

封存在硬盘:

按时间:

 网上皇家赌场网址 7

按发布部门:

网上皇家赌场网址 8

按标题:

网上皇家赌场网址 9

 

正文及附属类小部件:

网上皇家赌场网址 10

正文:

 网上皇家赌场网址 11

附件:

 网上皇家赌场网址 12

本文由68399皇家赌场发布于集成介绍,转载请注明出处:net下使用HAP实现的吉大校园通知网爬虫工具,网

关键词: 68399皇家赌场 c# 项目记录

上一篇:澳门皇家赌场SVG基础以及使用Javascript

下一篇:没有了

最火资讯