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

优采云 发布时间: 2021-09-17 22:02

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

  1.序言

  我相信很多人在进行开发时都有这样的需求:从网页中准确地提取所需的内容。经过思考,方法不外乎以下:(我的经验还很浅,还有更好的方法,请给我一些建议)

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

  aaa

  bbb

  ,如果您想匹配所有div元素,这将非常麻烦,而且很容易得到不需要的结果并错过所需的结果。)

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

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

  近年来,随着前端的兴起,越来越多的人开始理解jQuery,并对它留下深刻印象。非常重要的一点是jQuery选择器。它的简单性、高效性和易学性使前端工程师大大提高了工作效率。想想看。提取web内容需要处理前端。如果您可以使用jQuery选择器,它将是完美的

  2.理论准备

  是否要在下创建选择器。网?不,这不是我和其他年轻人能做的。。。。既然有了jQuery,为什么不直接使用它的选择器呢

  1.. Net获取web内容

  您可以在此处选择WebBrowser控件。事实上,它是一个微型ie。它可以做任何ie可以做的事情。有人问为什么不使用webclient直接下载web内容?请看第二点

  2.. Net与JS交互

  使用WebBrowser控件,您不仅可以获取网页内容,还可以提供与网页交互的功能。使用内置的document属性,我们可以将所需的JS代码注入web页面并执行它

  3.提取并返回所需内容

  在。Net中的invokescript函数来执行相应的JS函数并得到返回结果

  既然理论已经准备好了,让我们实施它吧

  3.函数实现

  测试页面:(福利网站Oh,但没有邪恶内容,请编辑明剑!)

  功能要求:提取所有好处

  从上图开始:

  

  

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

  让我们看看代码实现:

  WB是WebBrowser控件。本节主要用于将jQuery库注入到一些不收录jQuery库的网页中

   void InjectJQuery()<br />

{<br />

HtmlElement jquery = wb.Document.CreateElement("script");<br />

jquery.SetAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js");<br />

wb.Document.Body.AppendChild(jquery);<br />

JQueryInjected = true;<br />

}

  下面是要为注入执行的JS函数。因为不同的要求有不同的代码,所以不能重复注入。当需求改变时,您只需要改变注入的函数

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

if (JQScript == null)<br />

{<br />

JQScript = wb.Document.CreateElement("script");<br />

JQScript.SetAttribute("id", "JQScript");<br />

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

wb.Document.Body.AppendChild(JQScript);<br />

}

  这里是关键代码,它根据是否提取属性生成不同的代码。注入的代码非常简单。我相信对前端略知一二的朋友会一目了然。最后一行代码是执行注入函数并获取返回值

   if (txtAttribute.Text.Trim() == string.Empty)<br />

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

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

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

" var allhtml = '';" +<br />

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

" return allhtml;}" +<br />

" else return 'no item found.';}");<br />

else<br />

{<br />

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

"return $('" + txtSelector.Text + "').attr('" + txtAttribute.Text + "'); }" +<br />

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

" var allhtml = '';" +<br />

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

" return allhtml;}" +<br />

" else return 'no item found.';}");<br />

}<br />

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

  我相信一眼就可以看出,只需10行代码就可以使用功能强大的jQuery选择器,这比以前的旧方法效率高出许多倍。为什么不呢

  4.知识扩展

  1.只要您的前端知识足够难,您就可以注入更复杂的函数来实现更复杂的内容提取

  2.在Android和IOS中,这些功能在理论上是可以实现的

  3.也许有一天,我们会有一个类似的选择器来代替SQL,从而实现对数据库的高效查询

  附言:我的写作很差,知识面也不广。如果有错误,请改正

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线