爬虫大家或多或少的都应该接触过的,爬虫有风险,抓数需谨慎。
本着研究学习的目的,记录一下在 .NET Core 下抓取数据的实际案例。爬虫代码一般具有时效性,当我们的目标发生改版升级,规则转换后我们写的爬虫代码就会失效,需要重新应对。抓取数据的主要思路就是去分析目标网站的页面逻辑,利用xpath
、正则表达式等知识去解析网页拿到我们想要的数据。
本篇主要简单介绍三个组件的使用,HtmlAgilityPack
、AngleSharp
、PuppeteerSharp
,前两个可以处理传统的页面,无法抓取单页应用,如果需要抓取单页应用可以使用PuppeteerSharp
。
关于这三个组件库的实际应用可以参考一下定时任务最佳实战
系列文章。
新建一个控制台项目,抓取几个站点的数据来试试,先做准备工作,添加一个IHotNews
的接口。
using System.Collections.Generic;
using System.Threading.Tasks;
namespace SpiderDemo
{
public interface IHotNews
{
Task<IList<HotNews>> GetHotNewsAsync();
}
}
HotNews
模型,包含标题和链接
namespace SpiderDemo
{
public class HotNews
{
public string Title { get; set; }
public string Url { get; set; }
}
}
最终我们通过依赖注入的方式,将抓取到的数据展示到控制台中。
HtmlAgilityPack
https://html-agility-pack.net/
https://github.com/zzzprojects/html-agility-pack
在项目中安装HtmlAgilityPack
组件
Install-Package HtmlAgilityPack
这里以博客园为抓取目标,我们抓取首页的文章标题和链接。
using HtmlAgilityPack;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace SpiderDemo
{