从URL加载下一组结果-PHP cURL

时间:2018-09-26 20:09:44

标签: php curl scrape

寻求帮助,我正在使用curl从所述网站提取数据,在该网站上,他们的第一页上有10个结果,然后下一个10个结果集在下一个结果上附加了?page = 2等等。上。

我确实尝试了一个循环,但是它似乎没有用,我可以使用的任何建议,最好是滚动以加载更多内容,但想让他首先卷曲部分正确。

下面是我作为示例使用的测试代码,完整版本包括附加到URL的post参数,但只需要下一个结果

<?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>';
}

对于所有阅读此书的人,就像我一样,上面的代码也可以在值匹配后对任何给定URL上的H1标头进行基本提取,如果我可以帮助我解决新编码器的任何基本问题。

修改后的示例显示URL中的第1,2页示例。

<?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 :(得分:0)

好吧,在经过数小时的研究和失败之后,我完成了以下我希望做的工作,所以我希望与您分享。

我设置了一些变量,例如下面的值

// 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>'
?>