1

现在已经在这方面工作了一段时间,我很难过。我试图从远程网站页面上的特定 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>

问题是,这两个功能都不起作用。:( 有什么想法吗?

4

2 回答 2

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.tableHTML

于 2013-06-04T02:03:48.693 回答
-1

您不能单独使用 jQuery 的 .ajax、.load 或 .get 方法进行此类操作

是的,您可以,但是远程网站必须为此授予您授权.. 只需插入一个 iframe 并使用正常的 DOM 功能,如果没有跨域限制,您就可以。

您只能使用 php 获取完整页面(使用常用函数 include、require 等并传递网站 URL,但同样情况下,您需要获得授权..

于 2013-06-04T01:47:25.753 回答