C#+HtmlAgilityPack+Dappe

(转发请注明来源:http://www.cnblogs.com/EminemJK/)

    最近因为公司业务需要,又有机会撸winform了,这次的需求是因为公司有项目申报的这块业务,项目申报前期需要关注政府发布的相关动态信息,政府部门网站过多,人工需要一个一个网站去浏览和查阅,有时候还会遗漏掉,因此呢,我们打算用爬虫+移动端web来做,我主要负责爬虫和web Api。

爬虫篇

    爬虫主要采用.Net强大的开源解析HTML元素的类库HtmlAgilityPack,操作过XML的童鞋应该很快就可以上手,通过分析XPath来解析HTML,非常的方便的,不过还有一款不错的叫Jumony,没用过,对HtmlAgilityPack比较熟悉,所以首选了HtmlAgilityPack来作为主力军。

    HtmlAgilityPack的基本使用可以参考这篇 https://www.cnblogs.com/GmrBrian/p/6201237.html,

    效果图,多图慎入

采集广西财政厅例子

  

  因为是政府发布的出来的信息,所以信息的对外开放的,只是机器代替人工来浏览,不会被和谐的,主要采集文章的标题、日期和文章内容,以广西财政厅网站为例子。

First

  加载网站这个就不用说了,先查看网站的字符编码,如图 ,然后设置HtmlAgilityPack中的OverrideEncoding属性,再开始加载,不然采集到的是乱码,没有意义。

htmlAgilityPack.OverrideEncoding = Encoding.UTF8;

Second

  

    分析文章列表,浏览器F12查看HTML标签情况,可以分析出XPath为:

//ul[@class='dzjzw_list_main_ul']//li
    文章内容的链接的XPath标签:

//a
    文章发布的时间XPath标签:

//span[@class='date']

示例流程代码:

复制代码
//获取第一页的内容
HtmlNode row = GetHtmlDoc(htmlWeb, url);
//根据xpath获取列表
var list = row.SelectNodes("//ul[@class='dzjzw_list_main_ul']//li");
foreach (var data in list)
{
HtmlNode node = HtmlNode.CreateNode(data.OuterHtml);
HtmlNode a = node.SelectSingleNode("//a");
HtmlNode date = node.SelectSingleNode("//span['date']");
....
}

///

/// 这里偶尔会浏览网页失败的,所以失败了多浏览几次
///

(url).Result;//.GetStringAsync(url).Result;
return HtmlNode.CreateNode(htmlData);
}
else
{
return doc.DocumentNode;
}
}
return doc.DocumentNode;
}
catch
{
Log.Error("未能正确访问地址:" + url);
return null;
}
}

///

/// 加载网页
///

public static HtmlDocument GetDoc(HtmlWeb htmlWeb, string url)
{
try
{
return htmlWeb.Load(url);
}
catch (Exception ex)
{
return null;
}
}
复制代码
都可以使用 HtmlNode.InnerText 来获取到相关值,非常的方便。

Third

    文章详细内容也如此,通过分析XPath来分析即可,最头疼的是翻页的问题,因为政府网站使用的技术一般都是比较那个的,你懂的,有些使用到oncilck来触发的,有些表单提交,要具体问题具体分析了,用Fiddler和浏览器的F12大法来分析翻页数据来源,在这里的例子翻页也比较简单,通过拼接URL来进行翻页即可。

Fourth

    爬取到的之后,再来一个钉钉通知,在群里拉入一个机器人,可以参考钉钉的开发文档(https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.ece6g3&treeId=257&articleId=105735&docType=1#)。

  

  这样我们爬取的消息就第一时间通知到群里的小伙伴啦,是不是很炫酷,哈哈哈。后面做完了再上传到GitHub吧,持续更新,一起进步,下班下班。

————————————————————————————————————————————————————————————————————

根据评论区的大神也提供了其他好用的爬虫库,了解一下:

1> 一线码农   node+cheerio

2>newjajk    Chromedriver

3>ZUOXIANGE anglesharp

C#+HtmlAgilityPack+Dappe的更多相关文章

  1. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  2. 用WebRequest +HtmlAgilityPack 从外网抓取数据到本地

    相信大家对于WebRequest 并不陌生,我们在C#中发请求的方式,就是创建一个WebRequest .那么如果我们想发一个请求到外网,比如国内上不了的一些网站,那么该怎么做呢? 其实WebRequ ...

  3. 【C#】获取网页内容及HTML解析器HtmlAgilityPack的使用

    最近经常需要下载一些东西,而这个下载地址又会经过层层跳转,每个页面上都有很多广告,烦不胜烦,所以做了一个一键获得最终下载地址的小工具.使用C#,来获取网页内容,然后通过HtmlAgilityPack获 ...

  4. 爬虫技术 -- 进阶学习(十)网易新闻页面信息抓取(htmlagilitypack搭配scrapysharp)

    最近在弄网页爬虫这方面的,上网看到关于htmlagilitypack搭配scrapysharp的文章,于是决定试一试~ 于是到https://www.nuget.org/packages/Scrapy ...

  5. 黄聪:C#类似Jquery的html解析类HtmlAgilityPack基础类介绍及运用

    Html Agility Pack下载地址:http://htmlagilitypack.codeplex.com/ Html Agility Pack 源码中的类大概有28个左右,其实不算一个很复杂 ...

  6. HTML解析器HtmlAgilityPack的一些使用总结(C#)

    哎~本来这些总结是作为使用时的快速备注,但是用不上了.实际应用当中HtmlAgilityPack的可靠性不太稳定,一主要问题是:-> 一些字符会出现乱码或者变成'?',如韩语字符.由于我是已经有 ...

  7. 2012-09-10 23:30 如何解决HtmlAgilityPack得到的InnerText中有残留的script、样式的问题

    那么如何解决HtmlAgilityPack得到的InnerText中有残留的script.样式的问题呢,在google上搜索“HtmlAgilityPack script innerText”找到了s ...

  8. HtmlAgilityPack组件

    HtmlAgilityPack组件用于解析Html字符串,一个典型的应用场景是用于网页爬虫. 示例程序 using Common.Tools; using Datebase.Entity; using ...

  9. 使用HtmlAgilityPack解析Html(非常好用)

    /// <summary> /// 设计成一个exe,解决WebBrowser控件内存泄漏的问题. /// </summary> public partial class Ma ...

随机推荐

  1. Linux od与hexdump命令

    od命令:以指定格式输出文件内容常用格式:od -Ax -tx1 filename直接格式:od filename 等价 od -o filename语法:od [-abcdfsiloxv] [-An ...

  2. MyProject

    [PROJECT_20190101]20371230[PROJECT_20190101]

  3. 01--vim常用快捷键

    Linux中vim编辑器的功能非常强大,许多常用快捷键用起来非常方便,这里将我学vim入门时学的一些常用的快捷键分享给大家一下,希望可以帮助你们.   这个是我将鸟哥书上的进行了一下整理的,希望不要涉 ...

  4. jQuery访问json文件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. bzoj 1191: [HNOI2006]超级英雄Hero 网络流_残量网络

    题目描述: 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的 多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后 ...

  6. Python爬虫4------图片爬虫

    import urllib.request import re keyname="短裙" key=urllib.request.quote(keyname) headers=(&q ...

  7. IDEA - 自动添加代码

    自动添加代码Surroundwith 快捷键:Ctrl+Alt+T 有if.while.function.try.....

  8. [luogu2680] 运输计划 (lca+二分+树上差分)

    传送门 Description Input Output 一个整数,表示小 P 的物流公司完成阶段性工作所需要的最短时间. Sample Input 6 3 1 2 3 1 6 4 3 1 7 4 3 ...

  9. ubuntu的LAMP环境搭建

    服务器的搭建,经典组合:LAMP(Linux+Apache+Mysql+PHP) unbuntu源更新:sudo apt update 更新:sudo apt upgrade 安装Apache:sud ...

  10. TensorFlow 版本问题

    TensorFlow各个版本均可以在GitHub上下载,之前下载配置的是0.5.0版本,运行的时候,出现很多问题,什么模块缺失attribute,函数参数问题等,修改起来让人抓狂,后来索性下载使用0. ...