jquery抓取网页内容( 1.讲故事民生资讯号怎么处理?CSQuery代码怎么搞定)
优采云 发布时间: 2022-02-20 22:01jquery抓取网页内容(
1.讲故事民生资讯号怎么处理?CSQuery代码怎么搞定)
一:背景
1. 讲故事
前段时间,我在当地开设了一个民生信息账号。信息都是你抄的,你抄的是官媒的。小市民喜欢奇闻异事,所以有必要,如何定位抓怪故事的地方。上号的消息其实做起来很简单。可以使用逻辑回归。本文主要讨论如何获取。在C#中,大家都知道提取的通用库是HtmlAgilityPack,但是这个库的主流方法是使用xpath提取。网页的内容让我很不舒服。毕竟,我对莫名的抵抗并不熟悉。我这个年纪的码农,受过Jquery至少5-6年的教育,所以我必须使用类似Jquery的方法。python中有pyquery。为此,C#中有类似的方法吗?嘿,全能的github上确实有一个。. . 这就是本文介绍的CSQuery。
二:CSQuery
1. 安装
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 将内容附加到
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不仅在选择器上比较灵活,而且在节点的灵活操作方面,一般来说,如果是可以怀旧一下互动不是特别丰富。