【发布时间】:2016-02-16 06:09:39
【问题描述】:
我有一个循环,它准确地显示了抓取页面的结果。现在我放了一个循环,我需要提取到最后一个分页页面。我正在获取分页最后一个值并将其放入 for 循环中。让我们假设 1 到 1474 是范围。 现在我想用给定的时间抓取 url。假设 page=1, page=2, .... page=1474。并希望在 ul li 集中显示结果。
以下是我目前工作的代码。请提供建议,因为它显示了大约 1474 次的首页数据。
$ch = curl_init('http://www.qatarliving.com/v3/classifieds/search/category/mobile-devices');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36');
$res = curl_exec($ch);
if ($res === false) {
die('error: ' . curl_error($ch));
}
curl_close($ch);
$d = new DOMDocument();
@$d->loadHTML($res);
$x = new DOMXPath($d);
$review = $x->query('//p[@class="b-filters-block--el-title"]');
if($review->length > 0) {
foreach($review as $row){
echo "<h1>".$row->nodeValue . "</h1>";
}
}
$pagging = $x->query('//a[@class="b-pagination--el-page b-pagination--el-item"]');
if($pagging->length > 0) {
echo "<ul>";
foreach($pagging as $row){
$tag= '';
$ddt= $row->getAttribute('href');
$url = str_replace('http://www.qatarliving.com/v3/classifieds/search/category/mobile-devices?page=','',$ddt);
$array[$tag] = $url;
}
$arrayvalue = end($array);
echo "[ Last pagging value is : " . end($array) . " ]<br><br>";
$myname = $x->query('//p[@class="b-card--el-description"]');
for ($x = 1; $x <= $arrayvalue; $x++) {
echo "<h3>Page = " . $x . "</h3>";
foreach ($myname as $tag) {
echo "<li> " . $tag->nodeValue . "</li>";
}
}
echo "</ul>";
}
【问题讨论】:
-
在每个页面的循环中,您必须获取每个页面的列表。
-
您的评论的答案如下
-
循环 new DOMDocument() 有效吗?
-
不要在循环中创建任何对象。这会增加内存使用并导致内存不足异常
-
但计数器随着页数的增加而增加。请修复我的代码。
标签: php loops curl web-scraping