我有一个网络应用程序,我想从外部网页获取h1标签、第一张图片和前几行文本。我以前从未做过这个,认为最好使用jquery来完成,但我不确定。您能否指点我正确的方向或在.net和jquery中给出编码示例?谢谢。
我想的是,就像Facebook在帖子框中输入网址时会提取图片和几行内容。
我想的是,就像Facebook在帖子框中输入网址时会提取图片和几行内容。
由于CORS(跨源资源共享),您无法使用AJAX获取任何URL的标记,并且大多数网络站点不允许任何人使用其内容。在您的情况下,您应该在服务器上使用代理方法。
创建一个动作,接收URL并在服务器上获取其标记,然后使用AJAX使用新动作请求页面HTML。
从那里,您有两个选择。要么在服务器上解析HTML,提取所需的所有数据,然后将其发送回客户端 OR 将所有HTML发送回客户端。我强烈建议使用服务器进行解析,这将使用更少的带宽,而且您的服务器可能比大多数浏览器提供更好的性能和速度。
如果您决定在客户端端分析标记,则最简单的方法是将HTML传递给根元素,然后使用常规方法查询数据。
例如
var $root = $('<div>').html(response.html);
console.log($root.find('h1')); // all h1 tags in response's html
选项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
,则无需使用服务器端代理,而只需提供外部页面的完整路径即可。
在(opt. 1 code)中external.html
的位置上放置http://www.example.com/somepage.html
你可以尝试使用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
});
<%@ 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
});