背景

大家有没有这样的体验,在 CSDN 上发现某个博主有很多干货文章,我们就想拿到这个博主以往文章的列表,在需要的时候进行查询和浏览。

如果从 CSDN 网站上用复制粘贴的方式来建立这个列表,一个是工作量很大,另一个博主更新了文章,也不会第一时间知道。

所以,我想做这样的一个工具,把自己关注的 博主 主页地址存储下来,通过程序来构建这个列表,以便在需要查询资料的时候能够方便的找到。

本次,以 爬取 “老马的程序人生” 为例,来介绍如何爬取该博主的文章列表。


技术分析

首先,我们来看一下需要爬取的网页。

第一页对应的网址为:

https://blog.csdn.net/lsgo_myp/article/list/1?

第二页对应的网址为:

https://blog.csdn.net/lsgo_myp/article/list/2?

以此类推,我们就能找到要爬取的网页地址。

其次,我们来看一下网页的源代码。

从以上源代码,我们发现文章列表都包含在 article-item-box 类当中。

从以上源代码,我们发现有一篇文章的 style 属性为 display:none,该篇文章不显示,当然也不是博主写的,不清楚 CSDN 放置这篇文章的目的是什么。

对于其它的文章,在 h4 标签中包含了文章的标题和对应的url地址、在 date 类中包含了文章的发表时间、在 read-num 类的 num 类中包含了文章的阅读数。

只要我们获取到网页对应的HTML DOM树,通过相应的标签就可以得到希望的数据。


代码实现

Step01:构造存储文章的结构 CsdnDataItem

public class CsdnDataItem
{/// <summary>/// 发表时间/// </summary>public DateTime Data { get; set; }/// <summary>/// 阅读数/// </summary>public int ReadNum { get; set; }/// <summary>/// 文章标题/// </summary>public string Title { get; set; }/// <summary>/// 网址/// </summary>public string Url { get; set; }}

Step02:获取对应网页的 HTML Dom TREE

public static IHtmlDocument GetHtmlDocument(string url)
{IHtmlDocument document;try{document = new JumonyParser().LoadDocument(url);}catch{document = null;}return document;
}

Step03:获取文章列表 List<CsdnDataItem>

public static string EntryPoint;public static List<CsdnDataItem> GetArticle(int page)
{List<CsdnDataItem> result = new List<CsdnDataItem>();string url = EntryPoint + @"/article/list/" + page + "?";IHtmlDocument document = HtmlSpiter.GetHtmlDocument(url);if (document == null)return result;List<IHtmlElement> lists = document.Find(".article-item-box").ToList();for (int i = 0; i < lists.Count; i++){IHtmlAttribute attribute = lists[i].Attribute("style");if (attribute != null&& attribute.AttributeValue.Contains("display: none"))continue;CsdnDataItem item = new CsdnDataItem();IHtmlElement temp = lists[i].FindSingle("h4");item.Url = temp.FindSingle("a").Attribute("href").AttributeValue;string title = temp.FindSingle("a").InnerHtml().Trim();int index = title.LastIndexOf("</span>", StringComparison.Ordinal);if (index != -1){title = title.Substring(index + 7).Trim();}item.Title = title;string date = lists[i].FindSingle(".date").InnerHtml().Trim();item.Data = DateTime.Parse(date);string rednum = lists[i].FindFirst(".read-num").FindSingle(".num").InnerHtml().Trim();item.ReadNum = int.Parse(rednum);result.Add(item);}return result;
}

总结

我们来看一下具体的应用:

private void btn_Click(object sender, EventArgs e)
{CsdnUtility.EntryPoint = comboBoxPage.Text;int pageTo = integerInput1.Value;List<CsdnDataItem> lst = new List<CsdnDataItem>();for (int i = 1; i <= pageTo; i++){List<CsdnDataItem> temp = CsdnUtility.GetArticle(i);if (temp.Count == 0)break;lst.AddRange(temp);}ShowInGrid(lst);
}

获取的文章列表,如下所示:

这些数据慢慢积累起来,就可作为构建自己知识库的基础了,是不是很有意思。

今天就到这里吧!希望对大家有用,See You!


相关图文

  • 如何利用 C# 实现 K 最邻近算法?
  • 如何利用 C# 实现 K-D Tree 结构?
  • 如何利用 C# + KDTree 实现 K 最邻近算法?
  • 如何利用 C# 对神经网络模型进行抽象?
  • 如何利用 C# 实现神经网络的感知器模型?
  • 如何利用 C# 实现 Delta 学习规则?
  • 如何利用 C# 爬取带 Token 验证的网站数据?
  • 如何利用 C# 向 Access 数据库插入大量数据?
  • 如何利用 C# 开发「桌面版百度翻译」软件!
  • 如何利用 C# 开发「股票数据分析软件」(上)
  • 如何利用 C# 开发「股票数据分析软件」(中)
  • 如何利用 C# 开发「股票数据分析软件」(下)
  • 如何利用 C# 爬取「财报说」中的股票数据?
  • 如何利用 C# 爬取 One 持有者返利数据!
  • 如何利用 C# 爬取Gate.io交易所的公告!
  • 如何利用 C# 爬取BigOne交易所的公告!
  • 如何利用 C# 爬取 ONE 的交易数据?
  • 如何利用 C# 爬取「猫眼电影:热映口碑榜」及对应影片信息!
  • 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
  • 如何利用 C# 爬取「猫眼电影:最受期待榜」及对应影片信息!
  • 如何利用 C# 爬取「猫眼电影:国内票房榜」及对应影片信息!
  • 如何利用 C# + Python 破解猫眼电影的反爬虫机制?
  • 如何利用BigOne的API制作自动化交易系统 – 身份验证
  • 如何利用BigOne的API制作自动化交易系统 – 获取账户资产
  • 如何利用BigOne的API制作自动化交易系统 – 订单系统

技术图文:如何利用C#爬取CSDN的博客文章?相关推荐

  1. 使用Python爬取CSDN历史博客文章列表,并生成目录

    使用Python爬取CSDN历史博客文章列表,并生成目录 这篇博客将介绍如何使用Python爬取CSDN历史博客文章列表,并生成目录. 2020年 2020年04月 cv2.threshold() 阈 ...

  2. 开发记录_自学Python写爬虫程序爬取csdn个人博客信息

    每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...

  3. 四十二、Scrapy爬取csdn的博客标题和网址

    @Author:Runsen 每天一爬虫,健康生活每一天. 今天使用Scrapy爬下CSDN的文章的url 目标:爬取CSDN的各类文章的url,简单使用scrapy 来爬取 创建的Scrapy项目如 ...

  4. python requests爬虫——爬取李开复博客信息(包括javascript部分信息)

    今天是国庆假期第二天,已经玩了一天了,今天整理一下前两天写的数据分析作业思路,给实验报告打一下底稿.供对爬虫有兴趣的小伙伴们参考,也希望给实验没完成的同学提供一点小小的帮助. 任务要求. 1)分析页面 ...

  5. Selenium3+python3自动化(四十三)--爬取我的博客园粉丝的名称,并写入.text文件...

    爬取目标 1.爬取目标网站:我的博客:https://home.cnblogs.com/u/canglongdao/followers/ 爬取内容:爬取我的博客的所有粉丝的名称,并保存到txt 3.由 ...

  6. 统计个人CSDN的博客文章数量

    统计个人CSDN的博客文章数量 第一版 原始版本比较简单 只能统计第一页,而且没有进行排序 # coding:utf-8 import urllib2 from bs4 import Beautifu ...

  7. 如何使用live writer客户端来发布CSDN的博客文章?

    如何使用live writer客户端来发布CSDN的博客文章? http://blog.csdn.net/soune/article/details/4439158 live writer是写博客的一 ...

  8. CSDN,CNBLOGS博客文章一键转载插件 终于更新了!

    之前,Shawn Chou等朋友一直建议插件支持cnblogs文章转载,但一直没时间修改插件,今天晚上抽时间将插件进行了升级,可以支持 CSDN,CNBLOGS博客文章的一键转载.时间仓促,难免有各种 ...

  9. python统计csdn个人博客文章清单及字数

      为了统计csdn个人博客文章字数,之前已经学习并测试了获取文章字数.获取博客文章清单.python操作excel文件等内容,基本上可以拼凑起一个基本的统计程序.   合并之前三篇文章中的测试代码, ...

最新文章

  1. ITK:演示所有运算符
  2. C++11 - sizeof用于类成员
  3. python模拟鼠标拖动_Python+Selenium自动化篇-6-模拟鼠标操作
  4. 《构建之法》----自我答疑收获
  5. Codeforces Round#308
  6. multiset实现ALV树
  7. TrackMouseEvent 与_TrackMouseEvent
  8. Rhythmk 一步一步学 JAVA(9) JAVA 基础笔记[枚举,...]
  9. nginx强制下载txt等文件
  10. git/gitflow git工作流
  11. 人工智能时代孩子该学点什么?
  12. C# WPF MVVM 实战 - 1
  13. Python GUI制作实例 wxPython使用多线程 防假死含wxFormBuilder的文件及源码
  14. multisum 残留 there are no notifications for your products
  15. 安全模式下的自动启动
  16. 计算机开机没反应怎么办,告诉你电脑开机没反应怎么办
  17. (转)在日企面试如何主动给自己加分
  18. TCP协议详解(一) TCP服务的特点和TCP头部结构
  19. c语言二级安卓软件,C语言二级考试题库
  20. html 分享到新浪微博,jQuery实现鼠标选文字发新浪微博的方法

热门文章

  1. 学习Python开发培训有用吗
  2. 零基础参加软件测试培训需要学多长时间
  3. 软件测试-培训的套路-log3
  4. ionic app 开发和生产环境的配置
  5. Python实战之网络编程socket学习笔记及简单练习
  6. Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误
  7. Centos运行级别和开机过程
  8. 关于手机已处理里重复单据的处理办法
  9. 【Away3D代码解读】(四):主要模块简介
  10. cocos2dx 场景的切换