首页 > 解决方案 > 在抓取大网址时,我总是使用 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,),);

我怎么能在没有被禁止的情况下做到这一点。我已经在谷歌上搜索了很多相关的东西,但没有找到这些东西,如果有人知道,请帮助我。

标签: phpweb-scrapingweb-crawlersimple-html-dom

解决方案


如果在 X 时间段内来自同一 IP 的请求数量为 X ,则听起来远程 Web 服务器上有阻止请求的配置。

显然您无法更改远程服务器上的设置,因此您必须配置您的应用程序以尝试在远程服务器的设置范围内工作。

不知道设置是什么,这会很困难

您可以在代码中使用 sleep() https://www.php.net/manual/en/function.sleep.php来减慢您的请求。

或者你可以让你的脚本在 X 请求后终止,然后在 X 分钟后按计划重新开始,并使用 X 值直到它工作。

最好使用第 3 方网络爬虫/爬虫并将所有网页下载到您的服务器,然后在本地访问它们。一些刮板工具允许您配置刮板速度和延迟。


推荐阅读