jquery抓取网页内容(WOT全球技术创新大会2022,门票6折抢购中!购票立减2320元!)
优采云 发布时间: 2021-12-14 23:36jquery抓取网页内容(WOT全球技术创新大会2022,门票6折抢购中!购票立减2320元!)
WOT全球科技创新大会2022,门票40折抢购!购票立减2320元!
一:背景
1. 讲个故事
前段时间,我创建了一个当地民生信息账号。我复制了你的信息。你复制了官方媒体。市民喜欢奇怪的东西,所以就需要如何瞄准和捕捉奇怪的东西。账号上的消息其实做起来很简单,用logistic回归就可以了。本文主要讨论如何爬取。在C#中,大家都知道抓取的通用库是HtmlAgilityPack,但是这个库的主流方法是使用xpath来提取网页的内容,让我很不爽。毕竟,我不熟悉莫名的抵抗。我这个年纪的码农至少学了 5-6 年的 Jquery,所以我必须使用类似 Jquery 的方法。python中有pyquery。在 C# 中是否有类似的方法可以做到这一点?哎,真的有全能的github。. .
二: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不仅在选择器上灵活,而且在对节点的灵活操作方面,一般来说可以怀旧的时候它的交互性不是特别丰富。