如何用分页抓取网页

问题描述 投票:1回答:1

我正在建立一个新的服务器,并希望从网站上抓取一些信息

这是我的代码我试图逐个刮页,但我只得到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;

}

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

php web-scraping simple-html-dom
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.