如何通过分页方式抓取网页

时间:2019-03-23 15:57:23

标签: php web-scraping simple-html-dom

我正在设置新服务器,并想从网站上抓取一些信息

这是我的代码,我试图一张一张地刮掉页面,但我只能得到2页。

$result = array();
function scrapingAnimelist($url, $page)
{

    $res = array();
    $urlParsed = $url . "&page=" . $page;
    $html = file_get_html($urlParsed);

    $pageData = array();
    foreach ($html->find('div[class=body]') as $item) {
        $metaData = array();
        $metaData['title'] = $item->find('h2[class=title]', 0)->innertext;
        $metaData['img'] = $item->find('img[class=img]', 0)->src;
        $metaData['url'] = $item->find('a', 0)->href;
        array_push($pageData, $metaData);
    }

    $res[$page] = $pageData;

    if (sizeof($pageData) == 20) {
        $page++;
        $res[$page] = scrapingAnimelist($url, $page);
    }
    global $result;
    $result = $res;


    return $pageData;

}

我希望只有2个数组(页面数据)的json对象的输出在链接中为3:https://anime-list2.cf/anime-search?s=mag

1 个答案:

答案 0 :(得分:1)

您的$result在第二次运行时未设置

你应该像这样

$result = array();
function scrapingAnimelist($url, $page) {
  global $result;

  $urlParsed = $url . "&page=" . $page;
  $html = file_get_html($urlParsed);

  $pageData = array();
  foreach ($html->find('div[class=body]') as $item) {
    $metaData = array();
    $metaData['title'] = $item->find('h2[class=title]', 0)->innertext;
    $metaData['img'] = $item->find('img[class=img]', 0)->src;
    $metaData['url'] = $item->find('a', 0)->href;
    array_push($pageData, $metaData);
  }

  $result[$page] = $pageData;

  if (sizeof($pageData) == 20) {
    return scrapingAnimelist($url, $page + 1);
  }
  return $result;
}