在博客园学习知识是很方便的,但若做成客户端,自定义获取数据,那就更好啦! 那么需求有哪些呢,第一,我只查看推荐数大于2的文章;第二,我想要只查看C#或者Java的文章;第三,我想要查看推荐数大于2的新闻;第四,我还想搜索文章,并且只搜索推荐数大于2的文章。 先来预览一下成品吧 ...
在博客园学习知识是很方便的,但若做成客户端,自定义获取数据,那就更好啦!
那么需求有哪些呢,第一,我只查看推荐数大于2的文章;第二,我想要只查看C#或者Java的文章;第三,我想要查看推荐数大于2的新闻;第四,我还想搜索文章,并且只搜索推荐数大于2的文章。
先来预览一下成品吧
其中列表里左边是推荐数,反正我是优先看推荐数多的,中间是标题,右边是日期,至于其他信息,额,我其实不太关心,点击一行后直接在浏览器打开。
额,大体先这样吧,那么实现这些功能需要什么技能呢,首先我得准备一下通用类,大概需要web请求的帮助类、Gzip格式网页的加解密帮助类、html字符串解析的帮助类。
public class WebHelper { public readonly WebClient Web = new WebClient(); //错误重试次数 private int _tryTimes; public Encoding Encoding { set { Web.Encoding = value; } } public WebHelper() { Web.Encoding = Encoding.UTF8; } public WebHelper(Encoding encoding) { Web.Encoding = encoding; } /// <summary> /// 下载请求的资源 /// </summary> /// <param name="url">URL</param> /// <returns></returns> public get='_blank'>string DownloadString(string url) { try { return Web.DownloadString(url); } catch(WebException e) { if (e.Message.Contains("404") || e.Status == WebExceptionStatus.ConnectFailure || e.Status == WebExceptionStatus.ProtocolError || _tryTimes == 2) { _tryTimes = 0; return null; } _tryTimes++; return DownloadString(url); } } /// <summary> /// 将指定的字符串上载到指定的资源 /// </summary> /// <param name="address">地址</param> /// <param name="data">参数</param> /// <returns></returns> public string UploadString(string address, string data) { Web.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); try { return Web.UploadString(address, "POST", data); } catch { if (_tryTimes == 2) { _tryTimes = 0; return null; } _tryTimes++; return UploadString(address, data); } } /// <summary> /// 下载请求的资源(资源采用Gzip压缩) /// </summary> /// <param name="url">URL</param> /// <param name="encoding">页面编码格式</param> /// <returns></returns> public string DownloadGzipString(string url, Encoding encoding) { Web.Headers.Add("Accept-Encoding", "gzip"); try { return encoding.GetString(ZipHelper.GzipDecompress(Web.DownloadData(url))); } catch (WebException e) { if (e.Message.Contains("404") || e.Status == WebExceptionStatus.ConnectFailure || e.Status == WebExceptionStatus.ProtocolError || _tryTimes == 2) { _tryTimes = 0; return null; } _tryTimes++; return DownloadGzipString(url, encoding); } finally { Web.Headers.Remove("Accept-Encoding"); } } }
原标题:爬虫之博客园精华客户端
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。