现在已经有一段时间了,我很难过。我试图从远程网站页面上的特定div中提取内容,然后将该html插入我自己网站上的div中。我知道你不能单独使用jQuery的.ajax,.load或.get方法进行这种操作。
这是远程页面的HTML:
<html>
<body>
<div class="entry-content">
<table class="table">
...table #1 content...
...More table content...
</table>
<table class="table">
...table #2 content...
</table>
<table class="table">
...table #3 content...
</table>
</div>
</body>
</html>
目标: 我试图从远程页面的第一个表中获取html。所以,在我的网站上,我希望获取以下html并将其放在id =“fetched-html”的div中:
<table class="table">
...table #1 content...
...More table content...
</table>
到目前为止,我正在使用我的PHP函数:
<?php
function pullRaspi_SDImageTable() {
$url = "http://www.raspberrypi.org/downloads";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($curl);
curl_close($curl);
// Create new PHP DOM document
$DOM = new DOMDocument;
// Load html from curl request into document model
$DOM->loadHTML($output);
// Get 1st table
$output = $DOM->firstChild->getElementsByTagName('table');
return $output;
}
?>
最终结果应该在我的本地网站页面上显示如下:
<div id="fetched-html">
<table class="table">
...table #1 content...
...More table content...
</table>
</div>
这是PHP函数的另一种可能性吗?
<?php
function pullRaspPi_SDImageTable() {
// Url to fetch
$url = "http://www.raspberrypi.org/downloads";
$ch = curl_init($url);
$fp = fopen("raspberrypi_sdimagetable.txt", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
// Write html source to variable
$rasp_sdimagetable = curl_exec($ch);
// Close curl request
curl_close($ch);
return $rasp_sdimagetable;
}
// Then in the head of the html, add this jQuery:
<script type="text/javascript">
$("#fetched-html").load("<?php pullRaspPi_SDImageTable(); ?> table.table:first");
</script>
问题是,两种功能都不起作用。 :(有什么想法吗?
答案 0 :(得分:3)
使用simplehtmldom轻松从网站中提取HTML片段,然后您可以执行以下操作:
function pullRaspi_SDImageTable() {
$filename = '/tmp/downloads.html'; /// Where you want to cache the result
$expiry = 600; // 10 minutes
$output = '';
if (!file_exists($filename) || time() - $expiry > filemtime($filename)) {
// There is no cache, so fetch the results from remote server
require_once('simple_html_dom.php');
$html = file_get_html('http://www.raspberrypi.org/downloads');
foreach($html->find('div.entry-content table.table') as $elem) {
$output .= (string)$elem;
}
// Store the cache
file_put_contents($filename, $output);
} else {
// Pull the content from the cahce
$output = file_get_contents($filename);
}
return $output;
}
这将为您提供table.table
HTML
答案 1 :(得分:-1)
你不能单独使用jQuery的.ajax,.load或.get方法 操作类型
是的,你可以但是远程网站必须给你授权..只需插入iframe并使用正常的DOM函数,如果没有跨域限制,你可以使用。
您只能使用php获取完整页面(使用常用功能include,require等,并传递网站URL,但同样的情况下,您需要获得授权..