如何使用ajax一次刮一页,返回下一页链接然后再去

时间:2014-12-22 06:44:57

标签: javascript php jquery html ajax

问题:

我有一个PHP抓取功能和代码都运行良好,但它超时,因为它试图加载60个不同的页面......

我在考虑使用AJAX在循环中一次加载一个页面。因为我对AJAX很新,我遇到了一些麻烦。

这是我到目前为止,如果我提供链接,我可以让它循环链接,但是我希望它抓第1页,返回下一页链接,然后连续循环刮下一页,直到没有更多的页面。目前它进入无限循环模式...

任何想法的人?

这是我从使用数组的youtube视频中获取的代码(我只是通过字符串传递)

<?php
ini_set('display_errors',1);
//error_reporting(E_ALL);
set_time_limit(0);

require_once 'scrape_intrepid.php';

//posted to this page
if(isset($_POST['id'])) {

    //get the id
    $id = $_POST['id'];

    //this returns the next page link successfully, i just cant get it back into the function
    $ids = scrapeSite($id);
    echo $ids;
    echo "<br>";
    $data = $id . " - DONE";
    echo json_encode($data);

    exit();

} else {

    $ids = 'http://www.intrepidtravel.com/search/trip?page=1';
}
?>
<html>
    <head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script>
        $(function() {

            function update() {
                ids = <?=json_encode($ids);?>;
                if(ids){
                    var id = ids;
                    $.post("index.php",{id:id}).done(function(msg){
                        console.log(ids,msg);
                        update();
                    });
                } else {
                    console.log("done");
                    $("#log").html("Completed!");
                }
            }

            $("#go").click(function() {
                $("#go").html("Loading...");
                update();
            });
        });

    </script>
</head>
<body>
    <button id="go">Go button</button>
    <div id="log">Results</div>
</body>

1 个答案:

答案 0 :(得分:0)

结束以另一种方式解决这个问题:我调用function.php的函数运行脚本并返回下一个要刮的URL。这是msg值,因此一旦验证,就会再次调用刷新。刚刚处理了60页,每页各用38秒:S

<script>
$(document).ready(function() {

    refresh('http://www.intrepidtravel.com/search/trip?');

    function refresh(url) {
        $.ajax({
            type: "GET",
            url: "function.php",
            data: 'url=' + url,
            success: function(msg){
                $('#result').append('--->Completed! <br>Next Page: is ' + msg);
                console.log(msg);
                if ($.trim(msg) == 'lastpage'){
                    $('#result').append('--->Last page - DONE!');
                }
                else {
                    refresh(msg);
                }
            }

        }); // Ajax Call
    } //refresh

}); //document.ready
</script>

和function.php文件:

require_once&#39; scrape_intrepid.php&#39;;

if ($_GET['url']){
    $url = $_GET['url'];
    if ($url=="lastpage"){
        echo $url;
    } else {
    $nextlink = scrapeSite($url);
    echo($nextlink);
    }
}