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
相关产品推荐
相关产品推荐

