Я пытаюсь очистить страницы сайта, чтобы получить определенный текстовый контент. Новые страницы всегда добавляются, поэтому я хочу, чтобы иметь возможность просто увеличивать через каждую страницу (с использованием фиксированного URL формата), пока не получите 404.PHP cURL - Почему скрипт умирает после 36-го запроса на удаленный URL?
Страницы в этом формате:
http://thesite.com/page-1.html
http://thesite.com/page-2.html
http://thesite.com/page-3.html
... и т.д ....
Все работает плавно, пока не попадает на 36-ю страницу, затем просто умирает (даже не попадает в тестовый корпус 404). Я знаю, что в этом примере существует около 100 страниц, и я могу вручную просмотреть их все без проблем. Кроме того, на 36-й странице нет ошибки.
Тестовый чехол - я пробовал пройти через http://google.com 50 раз и не имел проблем с рекурсией cURL. Кажется, это веб-сайт, на котором я действительно хочу cURL, или что-то с моим сервером.
Кажется, что это какой-то предел на удаленном сервере или на моем сервере, так как я могу запускать эту страницу снова и снова без задержки, и я всегда читаю 36 страниц, прежде чем они умрут.
Могут ли удаленные серверы устанавливать ограничение на запросы cURL? Есть ли другие таймауты, которые мне нужно увеличить? Это возможная проблема с памятью сервера?
** Рекурсивная Зачистка Функция: ** (Объект $ локона создаются в первом вызове методы, а затем просто передаются по ссылке я прочитал это было лучше, чем создание и закрытия большого количества объектов завитка.)
function scrapeSite(&$curl,$preURL,$postURL,$parameters,$currentPage){
//Format URL
$formattedURL = $preURL.$currentPage.$postURL;
echo "Formatted URL: ".$formattedURL."<br>";
echo "Count: ".$currentPage."<br>";
//Create CURL Object
curl_setopt($curl, CURLOPT_URL, $formattedURL);
//Set PHP Timeout
set_time_limit(0);// to infinity for example
//Check for 404
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if($httpCode == 404 || $currentPage == 50) {
curl_close($curl);
return 'PAGE NOT FOUND<br>';
}
//Set other CURL Options
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 400); //timeout in seconds
$content = curl_exec($curl);
$html = str_get_html($content);
echo "Parameter Check: ".is_array($html->find($parameters))."<br>";
if(is_array($html->find($parameters))>0){
foreach($html->find($parameters) as $element) {
echo "Text: ".$element->plaintext."<br>";
}
return scrapeSite($curl,$preURL,$postURL,$parameters,$currentPage+1);
}else{
echo "No Elements Found";
}
}
блокировка может быть брандмауэр? – CreativeMind
Блокировка брандмауэра не блокирует запросы, если я перезагружаю страницу? Я могу перезагружать страницу назад к спине столько раз, сколько хочу, и скрипт всегда запускается, просто останавливается на 36-й странице. – JimmyJammed
Соединяет ли он 36 раз одновременно? Или 1 на 1? Завершите 1 страницу, затем переходите к следующему? – CreativeMind