如何使用php进行Web Scrapping,curl用于具有无限滚动的网页并具有ajax调用?

时间:2016-07-22 12:42:04

标签: php jquery ajax curl web-scraping

某些网站拥有无限滚动条,并使用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的操作吗?

如果我做错了,请告诉我。

请帮助我!

1 个答案:

答案 0 :(得分:1)

cURL请求只返回服务器的初始响应(无论是HTML,纯文本,XML,JSON,文件,基本上是什么)。它不会模拟浏览器环境。因此,当通过cURL请求页面时,页面上不会执行任何javascript - 没有可以执行的环境。

这意味着你不能“刮”除了最初的反应。使用对整个页面的cURL请求,任何由ajax加载的内容都不会返回给您。为了获得额外的内容,您必须直接向其javascript ajax方法中的原始页面访问的任何URL发出cURL请求。当然不知道这是否可行,它可能只返回JSON而不是HTML。如果事实证明您可以获得JSON,那么您可以使用它来构建自己的标记并以这种方式显示数据。