PHP网页抓取有四种方法:一、file_get_contents配正则,适用于静态页;二、cURL加DOMDocument,稳定且支持结构化解析;三、Goutte库,支持CSS选择器与交互逻辑;四、simple_html_dom,语法简捷但性能较低。

如果您希望使用PHP从目标网页中提取特定内容,但缺乏系统性的抓取逻辑,则可能是由于未选择合适的HTTP请求方式或DOM解析策略。以下是实现网页内容抓取的几种具体方法:
一、使用file_get_contents配合正则表达式
该方法适用于结构简单、无JavaScript渲染的静态页面,通过内置函数获取原始HTML字符串,再用正则匹配目标文本片段。注意需启用allow_url_fopen配置且目标站点允许直接访问。
1、在PHP脚本开头检查并设置流上下文选项,添加User-Agent头避免被拒绝:stream_context_set_default(['http' => ['user_agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36']])。
2、调用file_get_contents函数传入目标URL,捕获返回的HTML内容:$html = file_get_contents('https://example.com');。
立即学习“PHP免费学习笔记(深入)”;
3、编写精准的preg_match或preg_match_all模式,例如提取所有标签内的href属性:preg_match_all('/]+href=["\']([^"\']+)["\']/i', $html, $matches);。
二、使用cURL结合DOMDocument解析
此方案更稳定可靠,支持自定义请求头、Cookie、超时控制,并利用PHP原生DOM扩展进行结构化节点遍历,适合处理嵌套层级明确的HTML文档。
1、初始化cURL句柄并设置必要选项,包括CURLOPT_RETURNTRANSFER设为true、CURLOPT_FOLLOWLOCATION设为true、CURLOPT_USERAGENT设为常见浏览器标识:$ch = curl_init(); curl_setopt_array($ch, [$options]);。
2、执行请求并获取响应体:$html = curl_exec($ch); curl_close($ch);。
3、创建DOMDocument实例并加载HTML内容,启用libxml_use_internal_errors(true)忽略解析警告:$dom = new DOMDocument(); @$dom->loadHTML($html);。
4、使用getElementsByTagName或querySelector-like方式(需配合DOMXPath)定位元素,例如提取全部h1文本:$h1List = $dom->getElementsByTagName('h1'); foreach ($h1List as $h1) echo $h1->textContent . "\n";。
三、使用Goutte库模拟浏览器行为
Goutte是基于Symfony BrowserKit和DomCrawler组件的轻量级爬虫工具,支持CSS选择器语法,可自动处理重定向与基础表单提交,适合需要交互逻辑的场景。
1、通过Composer安装Goutte:composer require fabpot/goutte。
2、在脚本中引入自动加载器并实例化Client对象:require_once 'vendor/autoload.php'; use Goutte\Client; $client = new Client();。
3、调用$client->request()发送GET请求,返回Crawler实例:$crawler = $client->request('GET', 'https://example.com');。
4、使用filter()方法配合CSS选择器提取节点,如获取所有class为title的div文本:$titles = $crawler->filter('.title')->each(function ($node) { return $node->text(); });。
四、使用simple_html_dom类库快速提取
simple_html_dom提供类似jQuery的操作风格,语法直观易懂,适合快速原型开发或小型抓取任务,但性能低于原生DOM扩展。
1、下载simple_html_dom.php文件并包含进当前脚本:include 'simple_html_dom.php';。
2、调用file_get_html()加载远程URL或str_get_html()加载字符串内容:$html = file_get_html('https://example.com');。
3、使用find()方法按标签名、类名、ID等条件筛选元素,例如查找第一个img标签的src属性:$imgSrc = $html->find('img', 0)->src;。
4、遍历结果集时注意释放内存,结束前调用clear()方法:$html->clear();。










