我有一个Web应用程序,我想从外部网页获取h1标签和第一个图像以及前几行文本。我之前从未这样做过,认为使用jquery做得最好,但我不确定。你能否指出我正确的方向或在.net和jquery中给出一个编码示例?感谢。
当我在邮政信箱中输入一个网址作为新帖子时,我想有点像Facebook拉出图片和几行。
答案 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 :(得分: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