【问题标题】:scraping "next pages" using PHP, cURL, simplehtmldom使用 PHP、cURL、simplehtmldom 抓取“下一页”
【发布时间】:2013-07-12 17:43:46
【问题描述】:

我终于让我的刮刀工作了(有点),但现在我想知道如何自动转到下一页并从那里刮取相同的信息。我正在使用 cURL 复制整个页面(否则我会收到 500 错误)。这是我的代码:

<?

// create curl resource
        $ch = curl_init();

        // set url
        curl_setopt($ch, CURLOPT_URL, "http://example.com/results.asp?&j=t&page_no=1");

        //return the transfer as a string
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        // $output contains the output string
        $html = curl_exec($ch);

        // close curl resource to free up system resources
        curl_close($ch);      
// print $html . "\n";

require 'simple_html_dom.php';           
$dom = new simple_html_dom();
$dom->load($html);
foreach($dom->find("div[@id='schoolsearch'] tr") as $data){
    $tds = $data->find("td");
    if(count($tds)==3){
        $record = array(
            'school' => $tds[1]->plaintext, 
            'city' => $tds[2]->plaintext
        );
        print json_encode($record) . "\n";
        file_put_contents('schools.csv', json_encode($record) . "\n", FILE_APPEND);
    }
}

?>

它并不完美,但它是目前有效的!有谁知道我如何才能转到下一页?

【问题讨论】:

    标签: php curl screen-scraping web-crawler


    【解决方案1】:

    将其包装在一个循环中:

    $maxPages = 10;
    for ($i = 1; $i <= $maxPages; $i++) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://example.com/results.asp?&j=t&page_no=$i");
    
        etc...
    
    }
    

    您需要多整理一下,以避免在每个页面上都包含该文件,但您明白了。

    【讨论】:

    • 感谢您的帮助!不幸的是,它仍然不适合我。我将所有内容都包装在一个循环中(这就是我应该做的对吗?抱歉,我还是新手)并且我收到了相同的数据集(只有第一页)。
    • 代码中的假设是example.com/results.asp?&j=t&page_no=2实际上会返回第二页结果。您确实更改了 CURLOPT_URL 行以包含循环计数器,不是吗?
    • 是的,我做到了。还有其他想法吗?
    • 使用调试器,单步调试代码,看看哪些地方没有按预期工作。重新发布您的最新代码。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多