非常感謝您的代碼。
它幫助我創建自己的腳本來閱讀我需要的頁面。我以前從未編程過PHP,但是通過您的代碼和互聯網的智慧,我可以根據自己的需要更改腳本。
PHP
<?
header('Access-Control-Allow-Origin: *'); //all
$url = $_GET['url'];
if (substr($url,0,25) != "https://www.xxxx.yy") {
echo "Only https://www.xxxx.yy allowed!";
return;
}
$xpathQuery = $_GET['xpath'];
//need more hard check for security, I made only basic
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;
}
// get html
$html = check($url);
$dom = new DOMDocument();
@$dom->loadHTML($html);
// apply xpath filter
$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();
// return html in json response
// json structure:
// {html: "xxxx"}
$post_data = array(
'html' => $renderedHtml
);
echo json_encode($post_data);
?>
的Javascript
$.ajax({
url: "url of service",
dataType: "json",
data: { url: url,
xpath: "//*"
},
type: 'GET',
success: function() {
},
error: function(data) {
}
});
是的,也不適合我。他們給我們一個鏈接到「使用YQL條款 」頁面,但它沒有幫助。看起來YQL服務仍在運行 ,但由於錯誤消息指出「HTML表」查詢不再支持 。所以,我試圖找到另一種方法來從網頁上刮掉一個 HTML表格。也許有另一個YQL服務 可以幫助從網頁中提取表格,或者在YQL中有一些替代的查詢我可以嘗試。我想我必須閱讀YQL上的文檔才能找到答案。 – user1467483
@ user1467483錯誤不是由於HTML表格造成的。它與名爲「html」的YQL表相關。像任何其他查詢語言一樣思考YQL - 信息存儲在表結構中。關於尋找YQL的替代方案,這沒有必要。你只需要找到一個替代的YQL表。看到我的回答 –
我在GAE上使用YQL html表JSON輸出並使用lxml重構刮取。爲了不破壞現有代碼的接口,手頭有示例YQL輸出會很有用,尤其是JSON,這非常奇特。 [XML-to-JSON轉換文檔](https://developer.yahoo.com/yql/guide/xml_to_json.html)不是完整的規範(例如它是如何處理混合節點的?)。請分享樣本html與json,如[this one](https://stackoverflow.com/a/8763933/591336)。 – vicmortelmans