问题:
我有一个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>
答案 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);
}
}