某些网站拥有无限滚动条,并使用AJAX以分页方式加载信息。我想用我在PHP和curl中使用的代码来废弃Web数据。我是从网页上删除数据的新手。
以下是我用来废弃网页并获取数据的代码:
<?php
function curlUrl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_URL, $url);
$results = curl_exec($ch);
curl_close($ch);
return $results;
}
$restaurant = array();
function returningXPathObject($item) {
$xmlPageDom = new DomDocument();
$xmlPageDom->loadHTML($item);
$xmlPageXPath = new DOMXPath($xmlPageDom);
return $xmlPageXPath;
}
$restaurantUrl = curlUrl('restaurants page url');
$RestPageXpath = returningXPathObject($restaurantUrl);
// new XPath DOM object
$title = $RestPageXpath->query("//h4[@class='store-name']");
if ($title->length > 0) {
// For each restaturant
for ($i = 0; $i < $title->length; $i++) {
$restaurant['title'][] = $title->item($i)->nodeValue;
}
}
var_dump($restaurant);
我有10家餐馆。
我已经测试了这段代码并且它工作正常,但只提供10个结果,但网页有超过10个结果,一旦AJAX调用分页,我们在向下滚动后会得到更多结果。
我也检查了开发人员工具和网络标签。
当我看到ajax调用时,点击预览后我得到了
标记:“
我想知道如何制作标记节目,当我复制到我的文本编辑器中时,我得到了整个数据。
我应该每次复制并粘贴到我的编辑器然后执行类似file_get_contents的操作吗?
如果我做错了,请告诉我。
请帮助我!
答案 0 :(得分:1)
cURL请求只返回服务器的初始响应(无论是HTML,纯文本,XML,JSON,文件,基本上是什么)。它不会模拟浏览器环境。因此,当通过cURL请求页面时,页面上不会执行任何javascript - 没有可以执行的环境。
这意味着你不能“刮”除了最初的反应。使用对整个页面的cURL请求,任何由ajax加载的内容都不会返回给您。为了获得额外的内容,您必须直接向其javascript ajax方法中的原始页面访问的任何URL发出cURL请求。当然不知道这是否可行,它可能只返回JSON而不是HTML。如果事实证明您可以获得JSON,那么您可以使用它来构建自己的标记并以这种方式显示数据。