昨天,梦姐问我们,她存在一个任务,找到 关注数排行100 和 浏览量排行100 的专栏博客,在2017年还有更新的专栏。
梦姐说他要出去一趟,M大神在吃饭,于是我估算时间,只有半个钟。
整理一下:半个钟时间,找到两个表格中,在2017年更新的专栏。这就是需求。
<!--more-->
我开始分开需求,第一步,读取数据,读取两个表的数据。第二步获取博客更新时间,博客更新时间就是最近的文章的发布时间。第三步,把结果写到文件里。
开始因为xlsx的读取问题卡了我一下,我计算了,读取excel的方法,我需要20分钟写完,而把excel转换为csv读取,我只要1分钟,于是我就把excel格式换为csv。
到这里,预处理就做完了。
我需要定义一个数据结构,用来存储数据。
存储从表格读取到的数据,需要看一下表格存在哪些数据。
于是我定义一个类
因为不知道专栏作家叫什么,于是我就把这个类叫专家
class Proficient
{
public string Title
{
get; set;
}
public string Url
{
get; set;
}
public string Date
{
get; set;
}
}
需要读取的数据有 标题 和 网址,时间是需要进行计算。标题的作用是去重,网站是输入。但是表格还有其他内容,于是随意添加两个属性把他放进去。
接下来,如何从一个博客专栏网站读取到最新更新的博客?
我这里使用 HtmlAgilityPack
帮助解析网页。
HtmlAgilityPack
是一个强大的东西,使用的方法是从nuget搜索一下,就可以得到他。
安装进去,就可以使用了。
于是我写了一个函数 static void GetDate(Proficient proficient)
用于读取时间。
获取网址:var url = proficient.Url;
获取到了网址,就可以获取网页。
获取网页的方法请看代码
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
通过查看csdn的代码,可以知道存放博客的是 detail_list
如何从 HtmlAgilityPack 获取指定的 class ?
因为有xpath的存在,使用 xpath 就可以指定 class ,xpath 是和正则差不多的东西。
关于 xpath ,请看C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) - 数据之巅 - 博客园
看到detail_list前面是 ul 所以 xpath可以这样写
var temp = doc.DocumentNode.SelectNodes("//ul[@class='detail_list']/li")
其中的//
就是从网页任意位置
ul
就是标签,指定哪个标签,之后就是标签是否存在属性,这里指定属性是 class
,看起来很简单。那么后面的/li
就是路径,其实知道一个元素在哪,可以直接用路径来写。
但是我发现,其实找到detail_b
更快
下面就是专栏的代码,可以看到时间使用的 class 是detail_b
<ul class="detail_list">
<li>
<h4><a href="http://blog.csdn.net/lindexi_gd/article/details/52041944" target="_blank">win10 uwp 入门</a></h4>
<p class="detail_p">UWP是什么我在这里就不说,本文主要是介绍如何入门UWP,也是合并我写的博客。</p>
<div class="detail_b"><span>2016-07-27 08:55</span>
<div class="fa fa-eye"></div><em>2752</em>
</div>
</li>
于是把代码改为
temp = doc.SelectNodes("//div[@class='detail_b']");
和上面一样,只是这里使用的是div
,接下来就是拿到时间。
去掉html之后的文本就是时间
于是拿到第一个的时间就是博客的更新时间了,可能有些大神排序不是按照时间排的,但是这里不处理。
如何获取文本?请看代码
proficient.Date = temp.Elements().FirstOrDefault().InnerText
这样就是获取到了日期了,因为存在一些时间是 昨天 9:00
的,我就没转换了
日期获取完成,就是写入文件,写入的文件很简单,直接放代码
private static void Write(List<Proficient> proficient)
{
string file = "E:\\专栏排行\\csdn排行100.csv";
using (StreamWriter stream=new StreamWriter(new FileStream(file,FileMode.Create),Encoding.GetEncoding("gbk")))
{
foreach (var temp in proficient)
{
stream.WriteLine(temp.Title+","+temp.Url+","+temp.Date+","+temp.Folpv+","+temp.Num);
}
}
}
需要改进的:
使用命令行指定读取文件,判断博客最新的日期,不可以使用第一篇博客。
去重不可以使用博客专栏标题,因为存在重复。
如果大家有写质量高的文章,想推荐到csdn首页,可以联系我哦……我会在梦姐面前多多美言
2017 CSDN博客专栏评选
参见:使用HtmlAgilityPack XPath 表达式抓取博客园数据 - 晓风拂月 - 博客园
Html Agility Pack基础类介绍及运用 - itmuse - 博客园
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
昨天,梦姐问我们,她存在一个任务,找到 关注数排行100 和 浏览量排行100 的专栏博客,在2017年还有更新的专栏。 梦姐说他要出去一趟,M大神在吃饭,于是我估算时间,只有半个钟。 整理一下:半个钟时间,...
【网易云音乐C#爬虫】是一个利用C#编程语言实现的项目,旨在抓取和分析网易云音乐的公开数据。这个爬虫是基于开源库`NeteaseCloudMusicApi`,该库为开发者提供了一个方便的接口来与网易云音乐的API进行交互。在本文...
本教程将深入探讨如何使用C#编程语言来构建一个简单的爬虫,并结合XPath语法进行网页解析,同时实现数据的导出和Excel下载功能。 首先,我们需要了解C#的基础知识,它是一种面向对象的、类型安全的编程语言,广泛...
C#爬虫获取网页中表格数据 在本文中,我们将介绍如何使用C#语言来爬取网页中的表格数据。爬虫技术可以帮助我们快速地获取网络上的信息,从而满足我们的需求。 爬虫概述 爬虫是指一种自动化的程序,可以模拟用户的...
在本资源中,我们主要探讨的是使用C#语言编写的初步网络爬虫,用于自动采集邮件数据。C# 是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的应用程序开发,包括桌面应用、游戏开发以及网络爬虫等...
【C#爬虫源码:大众点评商户信息】 在IT领域,网络爬虫是一种非常重要的技术,用于自动化地从互联网上获取大量数据。C#作为一款功能强大的编程语言,也被广泛应用在爬虫开发中。本篇文章将围绕"大众点评商户信息"这...
本教程将专注于使用C#编程语言构建一个完整的网络爬虫。C#作为.NET框架的主要语言,提供了丰富的库和工具来实现这一目标。以下是关于“基于C#的网络爬虫”的详细知识点: 1. **基础概念**: - 网络爬虫:网络爬虫...
C#爬虫开源是指使用C#编程语言开发的网络爬虫程序,这些程序的源代码对外公开,允许开发者查看、学习甚至修改和分发。开源的意义在于促进技术交流,提高编程技能,以及推动软件的持续改进。在开源社区中,C#爬虫项目...
【标题】"C#爬虫 测试用,可能不完全" 涉及的主要知识点是C#编程语言在实现网络爬虫方面的应用。C#,作为Microsoft开发的一种面向对象的编程语言,拥有丰富的库和工具支持,使得开发爬虫变得更加便捷高效。本项目...
【标题】"带界面的C#爬虫"指的是一个使用C#编程语言开发的网络爬虫程序,该程序集成了用户界面,使得操作更为直观和便捷。与传统的命令行爬虫不同,它提供了图形化的交互体验,使得非编程背景的用户也能较为容易地...
本案例主要探讨了如何使用C#编程语言构建一个简单的网络爬虫,以获取飘花电影网和起点免费小说网站的数据。我们将深入理解C#爬虫的基本原理、实现方法以及涉及到的关键技术。 首先,C#作为.NET框架的主要开发语言,...
【标题】"C#爬虫源码在VS2010下的运行"涉及到的主要知识点是C#编程语言、网络爬虫开发以及Visual Studio 2010集成开发环境的使用。C#是一种由微软开发的面向对象的编程语言,常用于Windows平台上的应用开发,包括...
总的来说,"HtmlAgilityPack C# 爬虫源码 爬图片"项目展示了如何结合HtmlAgilityPack和正则表达式实现一个简单的图片爬虫。通过这个项目,我们可以学习到HTML解析、网络请求和文件操作等核心技能,这些都是构建C#...
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="LHT.Search.UI.Test" %> <!DOCTYPE html> <html <head runat="server"> <meta ...
本文将深入探讨使用C#进行网络爬虫开发的相关知识点。 1. **基础概念**: - **网络爬虫(Web Crawler)**:通过模拟浏览器行为,遍历网页并抓取所需信息的程序。 - **HTTP/HTTPS协议**:网络爬虫主要基于HTTP或...
这是一款用 C# 编写的网络爬虫 主要特性有: 可配置:线程数、线程等待时间,连接超时时间,可爬取文件类型和优先级、下载目录等。 状态栏显示统计信息:排入队列URL数,已下载文件数,已下载总字节数,CPU使用率和...
【标题】:“一个使用C# sockets的简单爬虫”揭示了如何在.NET环境中利用C#编程语言构建网络爬虫的基本概念。爬虫是自动化抓取网页数据的程序,常用于数据分析、搜索引擎索引等场景。C#,由微软开发,是一种面向对象...
本文将深入探讨使用C#语言编写登录爬虫的相关知识点。 首先,了解登录爬虫的基本概念。登录爬虫是网络爬虫的一种特殊形式,它需要模拟用户登录过程,获取登录后的网页内容。这通常涉及到对HTTP请求的理解,包括GET...
网络爬虫和搜索引擎是互联网数据挖掘与信息处理的两个重要技术。它们在现代信息技术中扮演着不可或缺的角色,尤其是在大数据分析、市场研究、竞争对手分析、内容推荐系统等方面。 网络爬虫,也称为网络蜘蛛或Web...