【发布时间】:2016-04-17 22:29:35
【问题描述】:
如何在不违反same-origin policy 的情况下做到这一点?我曾尝试使用http://anyorigin.com/ 之类的网站,但没有成功。我该如何做到这一点?
【问题讨论】:
-
查看我的post 了解我使用 JS 的经验。
标签: javascript web-scraping yql
如何在不违反same-origin policy 的情况下做到这一点?我曾尝试使用http://anyorigin.com/ 之类的网站,但没有成功。我该如何做到这一点?
【问题讨论】:
标签: javascript web-scraping yql
好吧,事实证明 YQL 不再起作用了,但我们不会让它阻止我们。
事实证明,有一个名为CloudQuery 的免费服务,我们可以使用它很容易地完成同样的事情。不幸的是,您在一段时间内可以拨打的电话数量非常有限。
var myUrl = "https://cloudquery.t9t.io/query?url=https%3A%2F%2Fstackoverflow.com%2Fusers%2F5732397%2Fstardustgogeta&selectors=*:nth-child(2)%20%3E%20*:nth-child(1)%20%3E%20*:nth-child(1)%20%3E%20*:nth-child(1)%20%3E%20*:nth-child(1)%20%3E%20*:nth-child(2)%20%3E%20*%20%3E%20*:nth-child(1)";
fetch(myUrl).then(r => r.json()).then(r => {document.write(r.contents[0].innerText)});
事实证明,Yahoo 的 YQL(Yahoo 查询语言)可以使用 XPath 在线查找页面的 HTML 元素。
只需在您的文档中包含以下内容:
<div id="a"></div>
<script>
var yqlCallback = function(data){
var rep = data.query.results.div;
document.getElementById('a').innerHTML = "StardustGogeta's reputation is "+rep+'.';
};
</script>
<script type='application/javascript' src="https://query.yahooapis.com/v1/public/yql?q=select%20content%20from%20html%20where%20url%3D'http%3A%2F%2Fstackoverflow.com%2Fusers%2F5732397%2Fstardustgogeta'%20and%20xpath%3D'%2F%2Fdiv%5B%40class%3D%22reputation%22%5D'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=yqlCallback"></script>
【讨论】: