Задать вопрос
vox_termen
@vox_termen

Как настроить парсинг из html в csv (или sql), без 5xx ошибки сервера?

Во время выполнения php-скрипта парсера, примерно на 300-ой записи сервер выдаёт ошибку 5xx. После чего скрипт может дописать в фоновом режиме еще 500-600 записей (из 30000)
Как настроить парсер, чтобы он записал все 30000 записей без ошибок сервера?

include "simple_html_dom.php";
header('Content-type: text/plain');

$filename = 'name.csv'; //файл для записи csv
$file = "urls.txt"; //файл со ссылками на все 30000 статей

$fields = file($file, FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES );
$fp = fopen($filename, 'a');
$i=1;

foreach($fields as $field) :

        $url1 = $field; 
//ссылка на статью для создания dom, надо метатеги и заголовок
       
        $url2 = $field/content.html;   
//ссылка на файл с контентом каждой статьи. Здесь только контент, без заголовка и метатегов
		
        $content1 = @file_get_contents($url2);
        $content1 = str_replace(array("\r\n", "\n", "<br />", "<br/>"), "", $content1);
        $_content1 = addslashes($content1);
		
        $html = new simple_html_dom();
        $html = file_get_html($url1);
        
        $title = $html->find('h1',0)->plaintext;
        $_title = addslashes($title);
        $metakey = $html->find( "meta[name=keywords]" );
        $metadesc = $html->find( "meta[name=description]" );
        $html->clear();
        unset($html);
        $metakey1 =  $metakey[0]->content;
        $metadesc1 = $metadesc[0]->content;

        fputcsv($fp, array($i, $_title, $metakey1, $metadesc1, $_content1 ));
        
        $i++;
  endforeach; 
        fclose($fp);
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
ScriptKiddo
@ScriptKiddo
Как настроить парсер, чтобы он записал все 30000 записей без ошибок сервера?


Между ссылками нужно делать паузы, чтобы не попадать в бан от рейт лимитера
Ответ написан
@mSnus
Для начала -- проверить, что именно вызывает ошибку 500 (включить и посмотреть лог php, подробности в нём).

Скорее всего превышен max execution time, если сервер ваш - можно увеличить, если нет - надо делить исходный файл на куски (300 записей ок, говорите?) и выполнять скрипт по очереди с каждым.

Ещё, возможно, разбирать html регэкспами будет быстрее, чем строить DOM.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы