使用Simple PHP Dom查找含指定球队名的父容器并获取赛事数据
用Simple PHP Dom抓取Yallourn/Yallourn North的赛事对阵数据
嘿,我之前折腾过类似的体育赛事数据抓取,给你捋个能直接上手的方案,应该能解决你的问题:
首先,得确保Simple PHP Dom库已经正确引入——要是还没弄,直接把官网的simple_html_dom.php下载到项目目录里就行。接下来分几步来:
1. 先把目标页面内容拉下来
这里要注意两个坑:一是有些网站会限制file_get_contents的请求,所以可以用curl兜底;二是页面编码大概率不是UTF-8,得转码避免乱码。
// 引入Simple PHP Dom库 include 'simple_html_dom.php'; // 目标赛事页面URL $url = 'http://websites.sportstg.com/comp_info.cgi?client=1-6177-0-434611-0&pool=1&action=ROUND&round=0'; // 优先用file_get_contents,失败就换curl $htmlContent = file_get_contents($url); if (!$htmlContent) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 加个UA头模拟浏览器,避免被拦截 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'); $htmlContent = curl_exec($ch); curl_close($ch); } // 转码(这个页面原始编码是ISO-8859-1,转成UTF-8避免乱码) $htmlContent = mb_convert_encoding($htmlContent, 'UTF-8', 'ISO-8859-1'); // 初始化Simple PHP Dom对象 $html = str_get_html($htmlContent);
2. 定位赛事行并提取对阵信息
这个页面的赛事数据都在表格里,咱们遍历每一行,找到包含目标球队的行,再把对阵双方和比分抠出来:
// 遍历所有赛事数据行(我查了下页面结构,赛事行的class是"data-row",直接用这个定位) foreach ($html->find('tr.data-row') as $row) { // 检查当前行有没有目标球队的名字 $rowText = $row->plaintext; if (strpos($rowText, 'Yallourn/Yallourn North') !== false) { // 提取主队名称(对应td里的a标签) $homeTeam = $row->find('td.team-home a', 0)->plaintext; // 提取客队名称 $awayTeam = $row->find('td.team-away a', 0)->plaintext; // 提取赛事比分 $score = $row->find('td.score', 0)->plaintext; // 输出结果,你也可以改成存数据库或者渲染到页面 echo "对阵双方:{$homeTeam} VS {$awayTeam}\n"; echo "当前比分:{$score}\n\n"; } } // 记得清理资源,避免内存泄漏 $html->clear();
踩坑提示
- 页面结构变了怎么办? 体育网站时不时会改页面布局,要是上面的选择器(比如
tr.data-row)失效了,直接用浏览器F12开开发者工具,重新找赛事行、球队名称的标签和class就行。 - 还是乱码? 打开页面源码,搜
<meta charset="xxx">,把mb_convert_encoding里的原始编码改成对应的值就行。 - 被网站拦截了? 除了加UA头,还可以给curl加个延迟,比如
sleep(2),别太频繁请求。
内容的提问来源于stack exchange,提问作者mobius2000
相关产品推荐
相关产品推荐

