一尘不染

从网址获取元数据

ajax

我已经使用Jsoup库从url获取元数据。

Document doc = Jsoup.connect("http://www.google.com").get();  
String keywords = doc.select("meta[name=keywords]").first().attr("content");  
System.out.println("Meta keyword : " + keywords);  
String description = doc.select("meta[name=description]").get(0).attr("content");  
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");

String src = images.get(0).attr("src");
System.out.println("Meta description : " + description); 
System.out.println("Meta image URl : " + src);

但是我想在 客户 端使用javascript 做到这一点


阅读 155

收藏
2020-07-26

共1个答案

一尘不染

您不能仅仅因为这个cross- origin问题而做客户端。您需要服务器端脚本来获取页面的内容。

或者 您可以使用YQL。这样,YQL将用作代理。
https://policies.yahoo.com/us/en/yahoo/terms/product-
atos/yql/index.htm

或者, 您可以使用https://cors-anywhere.herokuapp.com。这样,任何地方的cors都将用作代理:

例如:

$('button').click(function() {

  $.ajax({

    url: 'https://cors-anywhere.herokuapp.com/' + $('input').val()

  }).then(function(data) {

    var html = $(data);



    $('#kw').html(getMetaContent(html, 'description') || 'no keywords found');

    $('#des').html(getMetaContent(html, 'keywords') || 'no description found');

    $('#img').html(html.find('img').attr('src') || 'no image found');

  });

});



function getMetaContent(html, name) {

  return html.filter(

  (index, tag) => tag && tag.name && tag.name == name).attr('content');

}


<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>



<input type="text" placeholder="Type URL here" value="http://www.html5rocks.com/en/tutorials/cors/" />

<button>Get Meta Data</button>



<pre>

  <div>Meta Keyword: <div id="kw"></div></div>

  <div>Description: <div id="des"></div></div>

  <div>image: <div id="img"></div></div>

</pre>
2020-07-26