cURL网页爬取适配:网站更新后如何提取平均值数据
调整网页爬取代码以适配新的DOM结构
核心修改点是替换XPath表达式,从匹配class属性改为匹配style属性,具体操作如下:
1. 替换XPath表达式
将原有的//td[contains(@class, 'page_speed_')]替换为:
//td[@style="text-align:right;"]
这个表达式会精确匹配style属性值为text-align:right;的<td>标签。
如果目标页面的style属性写法存在差异(比如带空格text-align: right;、末尾无分号等),可以改用模糊匹配来兼容:
//td[contains(@style, 'text-align:right')]
2. 完整修改后的代码示例
// 初始化cURL请求 $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'); // 获取网页HTML内容 $html = curl_exec($ch); curl_close($ch); // 解析HTML $dom = new DOMDocument(); libxml_use_internal_errors(true); // 忽略HTML语法错误 $dom->loadHTML($html); libxml_clear_errors(); $xpath = new DOMXPath($dom); // 使用修改后的XPath查询目标节点 $targetNodes = $xpath->query('//td[@style="text-align:right;"]'); // 提取并输出数据 if ($targetNodes->length > 0) { // 取第一个匹配的td内容,若有多个目标节点需调整索引 $averageValue = trim($targetNodes->item(0)->nodeValue); echo "提取到的平均值:{$averageValue}"; } else { echo "未找到目标数据"; }
额外注意事项
如果页面中存在多个带有text-align:right;样式的<td>,需要结合目标节点的上下文(比如父节点的class、id,或者所在的表格位置)来优化XPath,避免提取到无关数据。例如:
//table[@id='stats-table']/tbody/tr/td[@style="text-align:right;"]
内容的提问来源于stack exchange,提问作者Ko1ind
相关产品推荐
相关产品推荐

