分页爬取

你可以在请求成功的回调函数中,添加新的请求。这在分页爬取的时候非常有用。

示例:

use XCrawler/XCrawler;

$xcrawler = new XCrawler([
    'name' => 'demo',
    'requests' => function() {
        $request = [
            'method' => 'get',
            'uri' => 'http://www.demo.com/',
            // 这里我们多传一个callback_data数组,用于在成功回调时使用
            'callback_data' => [
                'is_first_page' => 1,
            ],
        ];
        yield $request;
    },
    'success' => function($result, $request, $xcrawler, $res_headers) {
        $crawler = new Crawler();
        $crawler->addHtmlContent($result);

        // 判断是否是第一页
        if ($request['callback_data']['is_first_page'] == 1) {
            // 解析总页数 or 下一页链接
            $total_page = $crawler->filter('.total_page_selector')->html();
            for ($i=2, $i<=$total_page, $i++) {
                $request = [
                    'method' => 'get',
                    'uri' => 'http://www.demo.com/',
                    // 这里我们多传一个callback_data数组,用于在成功回调时使用
                    'callback_data' => [
                        'is_first_page' => 0,
                    ],
                ];
                // 添加下一页的请求到请求队列
                $xcrawler->addRequest($request);
            }
        }
    }
]);
$xcrawler->run();