关于这个问题的答复,我没有太多的声誉可以在那里发布 YQL: html table is no longer supported
昨天我遇到了同样的问题
我认为雅虎不会退回这个功能(我想在购买Verizon之后)。
我在网站上使用了很少使用YQL的脚本,但是在三天之后所有脚本都崩溃了,我很失望。
我在一周前才知道yql(我认为它是一个很棒的功能),如果我知道它不再受支持,我会想到另一种变体(我认为大公司必须先警告过,然后删除功能)。
我在使用javascript时遇到了CORS问题,当需要从另一个站点提取一些数据时(通常我使用curl来提取html)。
所以我用另一种方式解决了这个问题。
写简单的php xpath解析器,并发布在我的网站上。您可以通过ajax调用的GET请求提取部分html。
你也可以添加json return,我没有,因为我不需要这个功能。
它的php后端代码:
//gethtmldata.php backend file
<?
header("Access-Control-Allow-Origin: https://allowsite.com");
//header('Access-Control-Allow-Origin: *'); //all
//echo 'hello';
$url = $_GET['url'];
$xpathQuery = $_GET['xpath'];
/*
//diagnostic block
echo '<pre>';
echo $_SERVER['HTTP_USER_AGENT'].PHP_EOL;
echo $_SERVER['REMOTE_HOST'].PHP_EOL;
echo $_SERVER['REMOTE_ADDR'].PHP_EOL;
echo $url.PHP_EOL;
echo $xpathQuery.PHP_EOL;
echo '</pre>';
*/
//need more hard check for security, I made only basic
if( isset($_GET['url']) && isset($_GET['xpath'])){
function check($target_url){
$check = curl_init();
//curl_setopt( $check, CURLOPT_HTTPHEADER, array("REMOTE_ADDR: $ip", "HTTP_X_FORWARDED_FOR: $ip"));
//curl_setopt($check, CURLOPT_INTERFACE, "xxx.xxx.xxx.xxx");
curl_setopt($check, CURLOPT_COOKIEJAR, 'cookiemon.txt');
curl_setopt($check, CURLOPT_COOKIEFILE, 'cookiemon.txt');
curl_setopt($check, CURLOPT_TIMEOUT, 40000);
curl_setopt($check, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($check, CURLOPT_URL, $target_url);
curl_setopt($check, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($check, CURLOPT_FOLLOWLOCATION, false);
$tmp = curl_exec ($check);
curl_close ($check);
return $tmp;
}
$html = check($url);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$elements = $xpath->query($xpathQuery);
$temp_dom = new DOMDocument();
foreach($elements as $n) $temp_dom->appendChild($temp_dom->importNode($n,true));
$renderedHtml = $temp_dom->saveHTML();
echo '<result>';
print_r($renderedHtml);
echo '</result>';
}
?>
通过项目中的javascript调用
//js frontend
<div id="part-html-container"></div>
<script>
var source = "https://www.your-target-site.com/";
var xpath = '//div[contains(@class,"product-rating")]'; //standart xpath query
var clean_space = source.replace(/ /g, "%20");
$.ajax({
type: 'GET',
url: "https://site-where-script-situated.com/embedding/gethtmldata.php?url="+encodeURIComponent(clean_space)+"&xpath="+encodeURIComponent(xpath)+"",
dataType: 'html',
success: function(data){
$('#part-html-container').html(data);
console.log('success');
}
});
</script>
所以,你需要: - 服务器或托管与PHP; - ssl(如果你的项目网站使用它); - 这个PHP脚本