首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C#+HtmlAgilityPack+Dapper走一波爬虫

来源:山治先生

cnblogs.com/EminemJK/p/8920364.html

前言

因为公司业务需要,又有机会编写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

流程代码:

//获取第一页的内容

HtmlNode row = GetHtmlDoc(htmlWeb, url);

//根据xpath获取列表

var list = row.SelectNodes("//ul[@class='dzjzw_list_main_ul']//li");

foreach (var data in list)

{

....

}

///

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

///

public static HtmlNode GetHtmlDoc(HtmlWeb htmlWeb, string url)

{

try

{

var doc = GetDoc(htmlWeb, url);

if (doc == null)

{

int againIdx = 0;

while (againIdx++

{

System.Threading.Thread.Sleep(1000);

doc = GetDoc(htmlWeb, url);

if (doc != null)

break;

}

if (doc == null)

{

var htmlData = HttpHelper.Get(url).Result;//.GetStringAsync(url).Result;

return HtmlNode.CreateNode(htmlData);

}

else

{

return doc.DocumentNode;

}

}

return doc.DocumentNode;

}

catch

{

Log.Error("未能正确访问地址:" + url);

return null;

}

}

文章内容的链接的XPath标签

//a

文章发布的时间XPath标签

//span[@class='date']

都可以使用 HtmlNode.InnerText 来获取到相关值,非常的方便。

Third

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

Fourth

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

这样我们爬取的消息就第一时间通知到群里的小伙伴啦,是不是很炫酷,

后面做完了再上传到GitHub。

看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能

淘口令:复制以下红色内容,再打开手淘即可购买

范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424B0LNOR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券