php - 在抓取大网址时,我总是使用 simple_html_dom php 被禁止
问题描述
我正在使用 simple_html_dom 从网站上抓取数据我需要抓取11,000 个 URL,但是在 200 或 250 个请求之后我总是被禁止我怎么能轻松做到
我使用用户代理使用代理进行了一些睡眠呼叫,时间为 3、4、5 等秒,我已经优化了脚本
$url = "https://www.example.org?id=dynamic_id";
$html = new simple_html_dom();
$options = array(
"http"=>array(
"header"=>"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
$html = file_get_html($url, false, $context);
<--Scraping Code is here-->
我也试过代理。$context = array('http' => array('proxy' => "tcp://$proxies_array",'request_fulluri' => true,),);
我怎么能在没有被禁止的情况下做到这一点。我已经在谷歌上搜索了很多相关的东西,但没有找到这些东西,如果有人知道,请帮助我。
解决方案
如果在 X 时间段内来自同一 IP 的请求数量为 X ,则听起来远程 Web 服务器上有阻止请求的配置。
显然您无法更改远程服务器上的设置,因此您必须配置您的应用程序以尝试在远程服务器的设置范围内工作。
不知道设置是什么,这会很困难
您可以在代码中使用 sleep() https://www.php.net/manual/en/function.sleep.php来减慢您的请求。
或者你可以让你的脚本在 X 请求后终止,然后在 X 分钟后按计划重新开始,并使用 X 值直到它工作。
最好使用第 3 方网络爬虫/爬虫并将所有网页下载到您的服务器,然后在本地访问它们。一些刮板工具允许您配置刮板速度和延迟。
推荐阅读
- typescript - 如何在打字稿中重用类方法
- c++ - 引用成员类中的父类 - 包含循环
- wmic - WMIC:当 wmic 命令运行 .txt 文件中的计算机列表以安装程序时,自动回复“Y”
- flutter - 颤振国际 0.17.0-nullsafety.2 包初始化日期格式化
- css - 给出溢出值隐藏了嵌套的sidenav
- python - 仅考虑正元素的列平均值
- javascript - Discord bot 查看登录用户在哪些服务器上
- linux - 如何在不触发OOM杀手的情况下查询内核内存池状态?
- stm32 - STM32 HAL UART接收中断清理缓冲区
- python - update QStyle in EnterEvent