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


How to do Web Scraping using php, curl for web pages having infinite scroll and has ajax calls?

有些网站有无限滚动条,并使用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,那么您可以使用它来构建自己的标记并以这种方式显示数据。