技术图文:如何利用C#爬取CSDN的博客文章?
背景
大家有没有这样的体验,在 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的博客文章?相关推荐
- 使用Python爬取CSDN历史博客文章列表,并生成目录
使用Python爬取CSDN历史博客文章列表,并生成目录 这篇博客将介绍如何使用Python爬取CSDN历史博客文章列表,并生成目录. 2020年 2020年04月 cv2.threshold() 阈 ...
- 开发记录_自学Python写爬虫程序爬取csdn个人博客信息
每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...
- 四十二、Scrapy爬取csdn的博客标题和网址
@Author:Runsen 每天一爬虫,健康生活每一天. 今天使用Scrapy爬下CSDN的文章的url 目标:爬取CSDN的各类文章的url,简单使用scrapy 来爬取 创建的Scrapy项目如 ...
- python requests爬虫——爬取李开复博客信息(包括javascript部分信息)
今天是国庆假期第二天,已经玩了一天了,今天整理一下前两天写的数据分析作业思路,给实验报告打一下底稿.供对爬虫有兴趣的小伙伴们参考,也希望给实验没完成的同学提供一点小小的帮助. 任务要求. 1)分析页面 ...
- Selenium3+python3自动化(四十三)--爬取我的博客园粉丝的名称,并写入.text文件...
爬取目标 1.爬取目标网站:我的博客:https://home.cnblogs.com/u/canglongdao/followers/ 爬取内容:爬取我的博客的所有粉丝的名称,并保存到txt 3.由 ...
- 统计个人CSDN的博客文章数量
统计个人CSDN的博客文章数量 第一版 原始版本比较简单 只能统计第一页,而且没有进行排序 # coding:utf-8 import urllib2 from bs4 import Beautifu ...
- 如何使用live writer客户端来发布CSDN的博客文章?
如何使用live writer客户端来发布CSDN的博客文章? http://blog.csdn.net/soune/article/details/4439158 live writer是写博客的一 ...
- CSDN,CNBLOGS博客文章一键转载插件 终于更新了!
之前,Shawn Chou等朋友一直建议插件支持cnblogs文章转载,但一直没时间修改插件,今天晚上抽时间将插件进行了升级,可以支持 CSDN,CNBLOGS博客文章的一键转载.时间仓促,难免有各种 ...
- python统计csdn个人博客文章清单及字数
为了统计csdn个人博客文章字数,之前已经学习并测试了获取文章字数.获取博客文章清单.python操作excel文件等内容,基本上可以拼凑起一个基本的统计程序. 合并之前三篇文章中的测试代码, ...
最新文章
- ITK:演示所有运算符
- C++11 - sizeof用于类成员
- python模拟鼠标拖动_Python+Selenium自动化篇-6-模拟鼠标操作
- 《构建之法》----自我答疑收获
- Codeforces Round#308
- multiset实现ALV树
- TrackMouseEvent 与_TrackMouseEvent
- Rhythmk 一步一步学 JAVA(9) JAVA 基础笔记[枚举,...]
- nginx强制下载txt等文件
- git/gitflow git工作流
- 人工智能时代孩子该学点什么?
- C# WPF MVVM 实战 - 1
- Python GUI制作实例 wxPython使用多线程 防假死含wxFormBuilder的文件及源码
- multisum 残留 there are no notifications for your products
- 安全模式下的自动启动
- 计算机开机没反应怎么办,告诉你电脑开机没反应怎么办
- (转)在日企面试如何主动给自己加分
- TCP协议详解(一) TCP服务的特点和TCP头部结构
- c语言二级安卓软件,C语言二级考试题库
- html 分享到新浪微博,jQuery实现鼠标选文字发新浪微博的方法