c#抓取网页数据(1.讲故事民生资讯号民生民生)

优采云 发布时间: 2021-10-09 01:05

  c#抓取网页数据(1.讲故事民生资讯号民生民生)

  一:背景1.讲故事

  前段时间,我创建了一个当地民生信息账号。我复制了你的信息。你复制了官方媒体。市民喜欢奇怪的东西。所以需要如何定位和捕捉奇怪的东西。账号上的消息其实做起来很简单,用logistic回归就可以了。本文主要讨论如何爬取。在C#中,大家都知道抓取的通用库是HtmlAgilityPack,但是这个库的主流方法是使用xpath来提取网页的内容,让我很不爽。毕竟,我不熟悉莫名的抵抗。一个我这个年纪的码农受过 Jquery 的教育至少 5-6 年,所以我必须使用类似 Jquery 的方法。python中有pyquery。这样做,就是

  C# 中有类似的方法吗?哎,真的有全能的github。. . 这就是本文介绍的CSQuery。

  二:CSQuery1.安装

  github地址:然后直接在vs中点击nuget:

  

  2. 举几个例子

  万事俱备,那么如何使用呢?别着急,我举两个博客园里的例子。

  1) 从主页提取友情链接到

  

  如上图所示,这里如果要获取友情链接的几个大字,直接使用text()肯定是不行的。默认情况下,它还会捕获所有子节点的文本,如下图所示:

  

  如何处理?可以使用jquery提供的contents方法,然后判断获取的所有子节点中是否有文本节点,最后获取文本节点的内容,如下代码所示:

  

  是用js做的,但是用CSQuery代码怎么做呢?模仿一下,代码如下:

  

static void Main(string[] args)

{

var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com"));

var content = jquery["#friend_link"].Contents().Filter((dom) =>

{

return dom.NodeType == NodeType.TEXT_NODE;

}).Text();

Console.WriteLine(content);

}

  不知道用xpath提取这样的内容是不是很麻烦,但是jquery也不好用,但是熟悉。

  2) 如何给html中的一些元素着色

  有时需要为业务更改某些html标签的颜色,例如将首页tabmenu中的博客和区域更改为红色,如下图所示:

  

  如何处理CSQuery?如果你玩过jquery,一般来说步骤如下:

  有了步骤,C#代码如下:

  

static void Main(string[] args)

{

Config.HtmlEncoder = HtmlEncoders.None;

var jquery = CQ.CreateDocument(new WebClient().DownloadString("http://cnblogs.com"));

var html = jquery["#nav_left li"].Each(dom =>

{

var self = jquery[dom];

var text = self.Text();

if (text == "博问" || text == "专区")

{

self.Find("a").CssSet(new { color = "red" });

}

}).Render();

}

  

  3) 其他操作方法

  除了以上两种操作方法,还可以使用after、before、replaceAll、IS等。有一百多种实用方法。这篇文章肯定不能一一介绍。有兴趣的可以下载看看。小提琴。

  三:其他用途

  除了抓取html中的元素,我觉得这个东西还可以用来在发送邮件的时候操作邮件模板。毕竟很久以前大家都是用jquery来画html的,所以CSQuery也是可以的。使用 xslt 有优点也有缺点。, 举个例子:

  1. 生成html模板

  2. 使用 CSQuery 将 li 附加到 ul

  您可以使用 Append 将内容附加到节点。

  

class Program

{

static void Main(string[] args)

{

Config.HtmlEncoder = HtmlEncoders.None;

var strlist = new string[2] { "1", "2" };

var path = Environment.CurrentDirectory + "\\2.html";

var jquery = CQ.CreateFromFile(path);

foreach (var str in strlist)

{

jquery.Find("#main").Append($"{str}");

}

var html = jquery.Render();

}

}

  

  3. 局部渲染RenderSelection

  Render方法是将整个Dom渲染成html,但是有时候你只需要获取你修改的那部分内容而不是整个html,这涉及到部分渲染,可以使用RenderSelection方法,代码如下:

  

static void Main(string[] args)

{

Config.HtmlEncoder = HtmlEncoders.None;

var strlist = new string[2] { "1", "2" };

var path = Environment.CurrentDirectory + "\\2.html";

var jquery = CQ.CreateFromFile(path);

var current = jquery.Find("#main");

foreach (var str in strlist)

{

current.Append($"{str}");

}

var html = current.RenderSelection();

Console.WriteLine(html);

}

------------- output ----------------

12

  四:总结

  Jquery的这种操作方式对我个人来说还是比较舒服的,毕竟我很熟悉!不过html5中也加入了querySelector和querySelectorAll来支持css3选择器,非常强大,但是jquery不仅选择器灵活,节点的操作也很灵活。总的来说,它的交互性不是特别丰富。怀旧。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线