net核心如何实现定时抓取网站文章并发送到邮箱

  介绍

小编给大家分享一下。净心如何实现定时抓取网站文章并发送到邮箱,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!

准备

作为一个持续运行的工具,没有日志记录怎么行,我准备使用的是NLog来记录日志,它有个日志归档功能非常不错。在http请求中,由于网络问题吧可能会出现失败的情况,这里我使用波利来进行重试。使用HtmlAgilityPack来解析网页,需要对xpath有一定了解。下面是详细说明:

组件名用途githubNLog记录日志https://github.com/NLog/NLogPolly当http请求失败,进行重试https://github.com/App-vNext/PollyHtmlAgilityPack网页解析https://github.com/zzzprojects/html-agility-packMailKit发送邮件https://github.com/jstedfast/MailKit

有不了解的组件,可以通过访问github获取资料。

参考文章

https://www.jb51.net/article/112595.htm

获取,解析博客园首页数据

我是用的是HttpWebRequest来进行http请求,下面分享一下我简单封装的类库:

using 系统;   using 先;   using  System.Net;   using 包含;      namespace  CnBlogSubscribeTool   {   ,///& lt; summary>   ,///Simple  Http  Request 类   ,///.NET  Framework 祝辞=4.0   ,///作者:stulzq   ,///CreatedTime: 2017 - 12 - 12 15:54:47   ,///& lt;/summary>   public  class  HttpUtil   ,{   ,static  HttpUtil ()   ,{//才能Set  connection  limit , Default  limit  is  2   时间=ServicePointManager.DefaultConnectionLimit 才能;1024;   ,}      ,///& lt; summary>   ,///Default  Timeout  20多岁   ,///& lt;/summary>   ,public  static  int  DefaultTimeout =, 20000;      ,///& lt; summary>   ,///Is  Auto 重定向   ,///& lt;/summary>   ,public  static  bool  DefalutAllowAutoRedirect =,真的;      ,///& lt; summary>   ,///Default 编码   ,///& lt;/summary>   ,public  static  Encoding  DefaultEncoding =, Encoding.UTF8;      ,///& lt; summary>   ,///Default  UserAgent   ,///& lt;/summary>   ,public  static  string  DefaultUserAgent =安拍躆ozilla/5.0, (Windows  NT  6.1;, Win64;, x64), AppleWebKit/537.36, (KHTML, like 壁虎),Chrome/62.0.3202.94  Safari/537.36“   ,,,      ,///& lt; summary>   ,///Default 推荐人   ,///& lt;/summary>   ,public  static  string  DefaultReferer =,““      ,///& lt; summary>   ,///httpget 请求   ,///& lt;/summary>   ,///& lt; param  name=皍rl"祝辞Internet  Address   ,///& lt; returns> string   ,public  static  string  GetString (string  url)   ,{   var 才能;stream =, GetStream (url);   string 才能;结果;   using 才能;(StreamReader  sr =, new  StreamReader(流))   {才能   时间=result 才能;sr.ReadToEnd ();   ,,}   return 才能;结果;      ,}      ,///& lt; summary>   ,///httppost 请求   ,///& lt;/summary>   ,///& lt; param  name=皍rl"祝辞Internet  Address   ,///& lt; param  name=皃ostData"祝辞Post  request  data   ,///& lt; returns> string   ,public  static  string  PostString (string  url, string  postData)   ,{   var 才能;stream =, PostStream (url, postData);   string 才能;结果;   using 才能;(StreamReader  sr =, new  StreamReader(流))   {才能   时间=result 才能;sr.ReadToEnd ();   ,,}   return 才能;结果;      ,}      ,///& lt; summary>   ,///Create 响应   ,///& lt;/summary>   ,///& lt; param  name=皍rl"祝辞& lt;/param>   ,///& lt; param  name=皃ost"祝辞Is  post  Request   ,///& lt; param  name=皃ostData"祝辞Post  request  data   ,///& lt; returns> & lt;/returns>   ,public  static  WebResponse 连接CreateResponse (string  url, bool ,, string  postData =,,,)   ,{   var 才能;httpWebRequest =, WebRequest.CreateHttp (url);   时间=httpWebRequest.Timeout 才能;DefaultTimeout;   时间=httpWebRequest.AllowAutoRedirect 才能;DefalutAllowAutoRedirect;   时间=httpWebRequest.UserAgent 才能;DefaultUserAgent;   时间=httpWebRequest.Referer 才能;DefaultReferer;   if 才能;(职位)   {才能      var 才能;data =, DefaultEncoding.GetBytes (postData);   httpWebRequest.Method =,才能“POST";   httpWebRequest.ContentType =,才能“应用程序/x-www-form-urlencoded; charset=utf-8";   时间=httpWebRequest.ContentLength 才能;data.Length;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

net核心如何实现定时抓取网站文章并发送到邮箱