Загрузить следующий набор результатов из URL - PHP cURL - PullRequest
0 голосов
/ 26 сентября 2018

В поисках какой-то помощи я использую curl для извлечения данных с указанного веб-сайта, на сайте у них есть 10 результатов на первой странице, а затем следующий набор из 10 результатов находится на следующей с добавлением? Page = 2 и т. Д.на.

Я пробовал цикл, но он, похоже, не работал, любое предложение, с которым я мог бы поработать, желательно прокрутку, чтобы загрузить больше, но сначала нужно, чтобы он правильно свернул деталь.

Нижеэто тестовый код, который я использую в качестве примера, полная версия включает в себя параметр post, добавленный к URL, но просто нужны следующие результаты

<?php

// Main url but the next result will be on https://example.org/data/?page=2
$url = "https://example.org/data";

$result = get($url) ;

function get ($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36');
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
}

preg_match_all('!<h1>(.*?)<\/h1>!',$result,$title);

for ($i = 0; $i < count($result[1]); $i++) {
    echo '<h1>' . $title[1][$i] . '"</h1>';
}

Всем, кто читает это для изучения, как я, код вышеработает также для базового извлечения заголовка H1 для любого заданного URL, когда значения совпадают, если я могу помочь с любыми основными вопросами для новых кодеров, я сделаю это.

Модифицированный пример, показывающий пример страницы 1,2 в URL.

<?php

for ($i = 1; $i <= 2; $i++) {
$url = "https://www.gamespot.com/search/?q=gta&page=". $i;
echo $url . "<br>";
}

$result = get($url) ;

function get ($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.85 Safari/537.36');
$result = curl_exec($curl);
curl_close($curl);
return $result;
}

preg_match_all('!<h4 class="media-title" style="margin:0;padding-bottom:4px;">
                            <span style="font-weight:bold;"><a href=".*?">(.*?)<\/a><\/span>
          <\/h4>!',$result,$title);

for ($i = 0; $i < count($title[1]); $i++) {
echo '<p>' . $title[1][$i] . '</p>';
}

1 Ответ

0 голосов
/ 07 октября 2018

Хорошо, так что после многих часов исследований и неудач я сделал следующее, которое работает так, как я хотел, поэтому я хочу поделиться этим с вами.

Я установил некоторые переменные, например, со значениями ниже

// Get the value of $pg through the GET value of 'page'
$pg = $_GET['page'];

// Increase the $pg variable when clicking $next/$prev with +1 or -1
$next = $pg +1;
$prev = $pg -1;

// Append the $pg value to the CURL url
$url = "https://www.gamespot.com/search/?q=gta&page=".$pg;

// The next & previous
<?php
  echo '<div class="btn-group special">';
   // Added an IF statement so that this does not go to the -1 values
   if ($prev >= 1) {
    echo '<a href="results.php?page='.$prev.'" class="btn btn-info" role="button"><i class="fas fa-chevron-left"></i></a>';
   } else {
    // Nothing to display
   }
  echo '<a href="results.php?page='.$next.'" class="btn btn-info" role="button"><i class="fas fa-chevron-right"></i></a>';
  echo '</div>'
?>
...