使用jquery和.net从外部URL获取h标签和img src

时间:2014-05-19 06:00:03

标签: jquery .net

我有一个Web应用程序,我想从外部网页获取h1标签和第一个图像以及前几行文本。我之前从未这样做过,认为使用jquery做得最好,但我不确定。你能否指出我正确的方向或在.net和jquery中给出一个编码示例?感谢。

当我在邮政信箱中输入一个网址作为新帖子时,我想有点像Facebook拉出图片和几行。

4 个答案:

答案 0 :(得分:1)

由于CORS (cross-origin resource sharing),您无法使用AJAX获取任何网址标记,并且网络上的大多数网站都不允许任何人使用其内容。在您的情况下,您应该做的是在您的服务器上使用代理方法。

创建一个接收URL并在服务器上获取其标记的操作,然后使用AJAX使用您的新操作请求页面HTML。

从那里你有两个选择。解析服务器上的HTML,提取所需的所有数据,然后将其发送回客户端将所有HTML发送回客户端。我强烈建议使用服务器进行解析,它将使用更少的带宽,并且您的服务器可能具有比大多数浏览器提供的更好的性能和速度。

如果您决定在客户端分析标记,最简单的方法是将HTML传递给根元素,然后使用常规方法查询数据。

var $root = $('<div>').html(response.html);
console.log($root.find('h1')); // all h1 tags in response's html

这里的缺点是,一旦您允许浏览器解析您的标记,它将自动加载任何存在的资源,例如图像。

我没有使用.Net因此我无法向您提供您可能需要的确切工具,但我建议您查找自己在服务器上完成这两项任务的方法。

  1. 将给定的网址内容读入字符串。
  2. 使用任何给定的DOM解析器,传递HTML字符串并查询数据。

答案 1 :(得分:0)

你可以尝试混合使用jquery和php,或者你曾经拥有的东西:

//requestExternalURL.php

<?php
    $url = "http://url...";
    $homepage = file_get_contents($url);
    echo $homepage;
?>

并使用ajax / jquery:

$(".target").load("requestExternalURL.php", function(){
    var h1 = $("h1").first();
    var img = $("img").first().attr("src");
    //do something
});

一个简单的.net调用filename://requestExternalURL.aspx

<%@ Page Language="C#" %>
<script runat="server">
    string homepage = new System.Net.WebClient().DownloadString("http://url...");
</script>
<%=homepage%>

再次使用ajax / jquery:

$(".target").load("requestExternalURL.aspx", function(){
    var h1 = $("h1").first();
    var img = $("img").first().attr("src");
    //do something
});
希望它有所帮助。

答案 2 :(得分:0)

选项1:如果外部页面与调用页面位于同一服务器上,那么只需确保包含现代版本的jQuery,然后设置以下JS:

//let's say that page is external.html
$(function() {
    $.get( 'external.html', function( data ) {
        var html = $( $.parseHTML( data ) );
        var h1 = html.find( 'h1' ).first(); //first h1 tag
        var img = html.find( 'img' ).first(); //first img tag
        var text = html.find( 'body' ).contents().not( 'h1' ).filter(function() {
            return this.nodeType == 3;
        }).lt(5); //first few lines of text
        //h1, img and text may be added to the DOM or processed 
        //however you want
    });
});

选项2:但是,如果外部页面位于另一台服务器上,您可能需要创建一个.NET代理来为您提取该页面。然后你会像上面那样进行类似的调用,但你必须替换

external.html以上myproxy.aspx?url=http://www.example.com/somepage.html

选项3:如果您要获取内容的其他服务器支持CORS,则您不需要服务器端代理,但您只需提供完整路径外页。

http://www.example.com/somepage.html代替external.html(选择1代码)

答案 3 :(得分:0)

Facebook鼓励使用Open Graph Protocol数据来提取此类元数据。他们的基础设施可以完成抓取页面和解析可用元数据的工作。

您表示您正在使用.NET,如果是这种情况,那么您可以利用解析Open Graph数据的库来实现您的目的:请参阅 OpenGraph-Net OpenGraph .NET