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

Как правильно реализовать PHP парсер больших объемов информации?

Привет свежим тостам) Возник очередной, сомнительный для меня как новичка вопрос. Есть источник, как оттуда вытянуть информацию (именно так как мне нужно), я разобрался. Все работает, даже лучше чем надо, но есть один нюанс, когда я обрабатываю информацию в цикле до 50 страниц, все работает нормально. Но мне нужно как минимум выгрузить больше 200 страниц, а в будущем может быть и больше 600. Что бы снизить нагрузку на базу, я изначально забрасываю все в массив, потом загружаю одним большим запросом в базу.

Палю код:

<?php
include 'settings/functions.php';
function curl( $url ) {
$ua=curl_init();
curl_setopt($ua, CURLOPT_URL, $url);
curl_setopt($ua, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ua, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ua, CURLOPT_USERAGENT, 'User-Agent:Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1\r\n');
curl_setopt($ua, CURLOPT_HTTPHEADER, array('Content-type: text/html'));
return curl_exec($ua);
}
require_once 'simple_html_dom.php'; // врубаем парсер
$mass = array();
$more_info = $mysqli->query("SELECT id, tag, name FROM info WHERE source<>'' LIMIT 1");
while($info = mysqli_fetch_array($more_info)) {
$html = str_get_html(curl('http://сайт_потерпевший/'.$info['tag'].'/'));
foreach ($html->find('главный_тег') as $article) {
$id++;
foreach ($article->find('внутренний_тег') as $article) {
$mass[] = "('".$info['id']."','".$id."','".$article->find("time", 0)->plaintext."','".$article->find("span._title", 0)->plaintext."')";
}
}
}
echo implode(',', $mass);
if ($mass) {
$mysqli->query("INSERT INTO new_info (info_id, day, time, name) VALUES ".implode(',', $mass).";");
}
?>


Есть мысль, каждую странницу приравнивать с get параметром и передавать результат в сессию. Подскажите ребятки, очень нуждаюсь в срочном решении.
  • Вопрос задан
  • 2090 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Message Queue, лог обработанных страниц, демон который будет все это добро обрабатывать, скрипт который будет заносить задачи на обработку в очередь. Так же можно для гибкости вынести в отдельную очередь запись результатов в базу (или вообще хранить временно в redis каком). Тогда больше простора для масштабирования.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽