有些网站有无限滚动条,并使用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的操作吗?
如果我做错了什么,请告诉我。
请帮帮我!
cURL请求只返回服务器的初始响应(无论是什么,HTML、纯文本、XML、JSON、文件,基本上任何东西)。它不模拟浏览器环境。因此,当通过cURL请求页面时,页面上的任何javascript都不会被执行——没有可以执行的环境。
这意味着除了最初的反应,你什么都不能"刮"。ajax加载的任何内容都不能使用对整个页面的cURL请求返回给您。为了获得额外的内容,您必须使用javascript ajax方法直接向原始页面访问的任何URL发出cURL请求。当然,不知道这是否可行,它可能只是返回JSON而不是HTML。如果事实证明您可以获得JSON,那么您可以使用它来构建自己的标记并以这种方式显示数据。