从外部页面提取部分代码

时间:2018-10-06 10:40:59

标签: javascript php jquery html5

我正在创建一个个人网站,用于度假租赁(一个joomla网站)。 所有者已在此处制作广告:https://www.armor-vacances.com/locat...tml#calendrier 您是否知道有一种方法可以提取整个“日历”部分以显示在我的网站上? 例如,我尝试使用“ file_get_html”查找某些脚本,但我没有达到目标。 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

只要您不担心网站版权或机器人控制问题,并且您可以依靠正在阅读的网站,

php就能做到这一点,但是它不会一直存在要容易。

如果您要抓取的网站使用知道程序正在寻找的meta标签以机器就绪格式提供信息,那就太好了。

这是为您提供一些抓取代码的起点(我已将页面内容缓存到本地文件中,以便您每天不会访问网站太多次):

<?php
// php7.0

$src  ="https://stackoverflow.com/questions/52678213/extract-a-portion-code-from-an-external-page";
$tmpfn="C:/temp/temp.$srcX.$now.html";

$findDivId="Place your ID here";

$now  = date('Y-m-d', time());
$srcX = preg_replace("/[^a-zA-Z0-9]+/", "", $src);
$srcX = substr($srcX, 0, 155);

if ( file_exists($tmpfn) ) {
    $html=file_get_contents($tmpfn);
}
else {
    $ch = curl_init($src);

    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_HEADER, true);

    $html = curl_exec($ch);
    if ( !$html ) {
        echo curl_error($ch);
        exit;
    }
    curl_close($ch);

    file_put_contents($tmpfn, $html);
}

echo "<LI>html size = ".strlen($html)." bytes";

if ( strcmp($html, "") != 0 ) {
    $dom = new DOMDocument;
    @$dom->loadHTML($html);

    $divs = $dom->getElementsByTagName("div"); // or ->getElementsById($id);
    if ( $divs ) {
        echo "<UL>";
        foreach ($divs as $div) {
            echo "<LI>Tag::".$div->nodeName;
            if ( $div->hasAttributes() ) {
                foreach ($div->attributes as $attr) {
                    echo "<BR>Attribute::".$attr->nodeName . "=" . $attr->nodeValue . " ";

                    if ( strcmp($attr->nodeName,'id')==0 
                    and  strcmp($attr->nodeValue,$findDivId)==0 ) {
                        echo "<LI>Found $findDivId!!";
                    }

                }
            }
            echo "<BR>Value::".$div->nodeValue."<BR><BR>";
        }
        echo "</UL>";
    }
}

?>