首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

使用 PHP Snoopy 库解析网页 HTML 的实战指南

     編輯:PHP 綜合知識

在 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++;
}

关键步骤解析

  1. 初始化 Snoopy:引入类文件并实例化对象。
  2. 抓取页面:使用 fetch() 获取目标 URL 内容,getResults() 返回原始 HTML。
  3. DOM 解析:将 HTML 加载到 DOMDocument,配合 DOMXPath 精准定位节点(示例中为 id="bdshare" 的元素)。
  4. 数据提取:从节点 HTML 中截取 JSON 片段,修正引号后解析为对象,获取图片链接与描述。
  5. 图片下载:使用 file_get_contents 读取远程图片,保存到本地服务器。

注意事项

  • 目标站点结构若变更,XPath 查询需相应调整。
  • 大量抓取时建议加入延时或并发控制,避免对方服务器压力过大。
  • 确保服务器开启 allow_url_fopen 或支持 cURL,否则远程读取会失败。

掌握此技巧,可快速构建采集、聚合类应用,为 PHP 程序开发提供有力支持。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved