在 PHP 开发中,经常需要从远程网页抓取并解析 HTML 内容。Snoopy 是一个经典的 PHP 类,能模拟浏览器行为,轻松获取网页源码。本文将通过一个完整示例,演示如何结合 Snoopy 与 DOMDocument 解析目标页面,并提取所需数据。
set_time_limit(0);
$user = array('20517', '20518');
header("content-Type: text/html; charset=utf-8");
require_once './Snoopy.php';
$snoopy = new Snoopy();
$uri = 'https://www.juzimi.com/meitumeiju?page=1';
$snoopy->fetch($uri);
$con = $snoopy->getResults();
$doc = new DOMDocument();
$doc->loadHTML($con);
$result = [];
$i = 0;
foreach ((new DOMXPath($doc))->query('//*[@id="bdshare"]') as $element) {
$row = $doc->saveHTML($element);
$start = stripos($row, '{');
$end = stripos($row, '}');
$len = $end - $start + 1;
$json = substr($row, $start, $len);
$json = str_replace("'", '"', $json);
$obj = json_decode($json);
$pic = $obj->pic;
$desc = $obj->desc;
$filename = '/Uploads/meiju/card' . date('ymdhis') . $i . '.png';
$file = '/alidata/www/test' . $filename;
$image = file_get_contents($pic);
file_put_contents($file, $image);
$i++;
}
fetch() 获取目标 URL 内容,getResults() 返回原始 HTML。DOMDocument,配合 DOMXPath 精准定位节点(示例中为 id="bdshare" 的元素)。file_get_contents 读取远程图片,保存到本地服务器。allow_url_fopen 或支持 cURL,否则远程读取会失败。掌握此技巧,可快速构建采集、聚合类应用,为 PHP 程序开发提供有力支持。