jquery抓取网页内容(从网页中准确提取所需的内容,你知道吗?)

优采云 发布时间: 2022-04-07 13:01

  jquery抓取网页内容(从网页中准确提取所需的内容,你知道吗?)

  1. 前言

  相信很多人在做开发的时候都有过这样的需求:准确的从网页中提取出需要的内容。想来想去,方法无外乎如下:(本人还是新手,有更好的方法,请指点)

  1. 使用正则表达式来匹配所需的元素。(缺点:如果同一类型的元素具有不同的属性,例如

  啊啊啊

  bbb

  , 如果要匹配所有的 div 元素,会比较麻烦,而且很容易得到不想要的结果而错过需要的结果。)

  2. 使用 Linq to XML 将网页转换为 XML 文档。(缺点:需要一个转换过程,效率不高。)

  3. 使用网站提供的WebServices或WebAPI等接口直接获取需要的数据。(缺点:需要先获取接口文档,一般不匿名提供。)

  随着近几年前端的兴起,越来越多的人开始认可和信服JQuery这个强大的工具。其中最重要的一点是JQuery选择器,简洁、高效、易学,大大提高了前端工程师的工作效率。. 想想看,提取网页内容就是在处理前端。如果可以使用 JQuery 选择器,那就完美了!!!

  2. 理论准备

  您想在.NET 下自己制作选择器吗?不,这不是我可以等待年轻一代去做的事情。. . . 既然 JQuery 已经存在,为什么不直接使用它的选择器呢?

  1. .NET 获取网页内容

  在这里您可以选择 webbrowser 控件。事实上,它是一个微型 IE,它可以做 IE 能做的所有事情。有人会问为什么不用WebClient直接下载网页内容呢?请看第二点。

  2. .NET 与 JS 交互

  使用webbrowser控件,不仅可以获得网页的内容,更重要的是提供了与网页交互的功能。使用内置的 Document 属性,我们可以将所需的 JS 代码注入网页并执行。

  3. 提取并返回所需内容

  在 .NET 中,我们可以使用 Docment 的 InvokeScript 函数来执行相应的 JS 函数并获取返回结果。

  现在理论已经准备好了,接下来让我们实现它。

  3. 函数实现

  测试页:(福利网站哦,不过绝对没有邪恶内容,请编辑明鉴!)

  功能要求:提取所有“好处”!!!!

  从图中可以看出,“福利”是准确提取出来的。而且您只能获得所需的属性值。您所要做的就是输入最短 15 个字符。

  我们看一下代码实现:

  其中wb为webbrowser控件,本节主要是将JQuery库注入到一些不收录JQuery库的网页中。

  无效的 InjectJQuery()

  {

  HtmlElement jquery = wb.Document.CreateElement("script");

  jquery.SetAttribute("src", "");

  wb.Document.Body.AppendChild(jquery);

  JQueryInjected = true;

  }

  这里是需要注入的JS函数。因为不同的需求有不同的代码,所以不能重复注入。当需求发生变化时,只需要更改注入的函数即可。

  JQScript = wb.Document.GetElementById("JQScript");

  如果(JQScript == null)

  {

  JQScript = wb.Document.CreateElement("script");

  JQScript.SetAttribute("id", "JQScript");

  JQScript.SetAttribute("type", "text/javascript");

  wb.Document.Body.AppendChild(JQScript);

  }

  这是关键代码,根据是否要提取属性生成不同的代码。注入的代码很简单,相信稍微懂一点前端的朋友一看就懂。而最后一行代码是执行注入的函数并获取返回值。

  if (txtAttribute.Text.Trim() == string.Empty)

  JQScript.SetAttribute("text", "function GetJQValue() { if ($('" + txtSelector.Text + "').length == 1) {" +

  "return $('" + txtSelector.Text + "')[0].outerHTML; }" +

  " else if ($('" + txtSelector.Text + "').length > 1) {" +

  “var allhtml = '';” +

  " $('" + txtSelector.Text + "').each(function() {allhtml=allhtml+$(this)[0].outerHTML+'\\r\\n';});" +

  "返回所有html;}" +

  " else return '未找到项目。';}");

  别的

  {

  JQScript.SetAttribute("text", "function GetJQValue() { if ($('" + txtSelector.Text + "').length == 1) {" +

  "return $('" + txtSelector.Text + "').attr('" + txtAttribute.Text + "'); }" +

  " else if ($('" + txtSelector.Text + "').length > 1) {" +

  “var allhtml = '';” +

  " $('" + txtSelector.Text + "').each(function() {allhtml=allhtml+$(this).attr('" + txtAttribute.Text + "')+'\\r\\n'; });" +

  "返回所有html;}" +

  " else return '未找到项目。';}");

  }

  textBox2.Text = wb.Document.InvokeScript("GetJQValue").ToString();

  相信大家一眼就看出来了。只需 10 行代码,您就可以使用强大的 JQuery 选择器。效率比旧方法高出许多倍。为什么不这样做?

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线