You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中file_get_contents转curl后提取Yahoo财经标题报错求助

解决方案

1. 修复curl获取页面失败的问题(preg_replace报错根源)

Yahoo财经有反爬机制,默认curl请求会被拦截,导致返回内容为null,触发preg_replace()的废弃警告。需要配置curl模拟浏览器请求:

$url = 'https://finance.yahoo.com/your-target-page';
$ch = curl_init($url);
// 核心配置:模拟浏览器请求头
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 测试环境可跳过SSL验证,生产环境建议开启

$html = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 先验证请求是否成功
if ($httpCode !== 200 || empty($html)) {
    die('页面获取失败,HTTP状态码:' . $httpCode);
}

2. 修复正则提取标题的问题

你之前用preg_replace()是错误的,提取标题应该用preg_match(),同时要确保页面内容不为空:

if (preg_match('/<title>(.*?)<\/title>/i', $html, $matches)) {
    $title = trim($matches[1]);
    var_dump($title);
} else {
    echo '未找到页面标题';
}

3. 用simple_html_dom_parser提取标题(推荐)

既然你已经在用这个库解析表格,直接通过DOM查找提取标题更稳定,不受页面结构小变化影响:

// 引入库文件
require_once 'simple_html_dom.php';

// 创建DOM对象
$dom = str_get_html($html);

// 提取title标签内容
if ($titleNode = $dom->find('title', 0)) {
    $title = trim($titleNode->plaintext); // 仅获取纯文本
    var_dump($title);
} else {
    echo '未找到标题标签';
}

// 清理DOM资源
$dom->clear();

内容的提问来源于stack exchange,提问作者Chris Appleby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:43:24