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

网页爬虫获取字段信息30次请求后截断问题咨询

Hey,第一次提问完全不用不好意思~针对你遇到的爬虫请求30次后内容截断的问题,我来帮你拆解原因、给出解决办法,同时聊聊合规性的疑问:

一、内容截断的核心原因及解决办法

你遇到的情况大概率是网站的反爬机制触发了,而非单纯的User-Agent问题(不过UA确实是反爬检测的关键项之一)。短时间内发送30次请求,很容易被网站判定为非人类访问,进而返回截断内容来限制爬虫获取完整信息。

1. 具体解决步骤

(1)伪装请求头,模拟真实浏览器

你当前用file_get_html发起的请求,默认头信息非常容易被识别。建议自定义User-Agent,甚至补充其他常见请求头(比如Accept、Referer),让请求更像真实用户的浏览器行为。修改后的代码示例:

<?php
require_once 'simple_html_dom.php';

// 模拟Chrome浏览器的请求头
$opts = [
    'http' => [
        'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\r\n" .
                    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n" .
                    "Referer: https://empresite.eleconomista.es/\r\n"
    ]
];
$context = stream_context_create($opts);
$html = file_get_html('https://empresite.eleconomista.es/MUSEO-VINO-MADRID.html', false, $context);

foreach ($html->find('section.wlogo') as $bloc) {
    foreach ($bloc->find('li.ico-cif') as $cif) {
        echo $cif->plaintext.';';
    }
}
?>

(2)控制请求频率,添加随机延迟

30次请求短时间内发出太密集了,一定要给请求之间加上随机延迟,模拟人类浏览的间隔(比如1-3秒):

// 在每次请求前插入1-3秒的随机延迟
sleep(rand(1, 3));

(3)复用会话Cookie

有些网站会通过Cookie识别正常用户会话,你可以先手动访问一次目标页面,复制浏览器中的Cookie值,加到请求头里,进一步提升请求的“真实性”。

(4)排查动态渲染可能性

虽然你手动查看HTML是完整的,但不排除网站在检测到爬虫时,后端返回了不同的内容。如果前面的方法都无效,可以考虑用PhantomJS或Puppeteer这类工具模拟完整浏览器渲染,但这个复杂度更高,优先尝试前面的方案。

二、爬取合规性说明

关于爬取是否合规,你可以从这几点判断:

  • 先查看网站的robots.txt(直接访问https://empresite.eleconomista.es/robots.txt),里面会明确标注哪些路径允许爬虫访问。如果目标页面在允许范围内,基本符合爬虫伦理。
  • 网站条款未提及自动获取信息,不代表完全无限制。核心原则是不要对网站服务器造成压力,控制请求频率,避免影响正常用户访问。
  • 另外,CIF(西班牙公司税号)属于公开商业信息,但也要确保你爬取的内容用于合法用途,避免涉及隐私或版权纠纷。

如果以上方法都无法解决,最稳妥的方式是联系网站管理员,询问是否允许爬虫访问,或者是否有官方API可以获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:34:58