【问题标题】:how to Parse a website that is using infinite scroll technique to display content? [closed]如何解析使用无限滚动技术显示内容的网站? [关闭]
【发布时间】:2015-07-11 13:06:50
【问题描述】:

如何抓取那里的所有数据?我正在编写一个 php 脚本来从具有动态加载程序的网站上抓取数据。我正在使用 HTML Dom 解析器和 scoopy 来抓取以下网站 https://www.lyoness.com/au/search/partner/ 。 我是初学者,我无法确定如何解析无限滚动。

<input id="btnNextPage" type="button" class="btn btn-primary" style="width: 100%" value="Next page">

【问题讨论】:

  • 您需要在您的浏览器中调试它,以了解如何以及从何处获取无关内容。很可能它通常只是一个 $.load("url #div") 摘录,有时是一个不同的寻呼地址,甚至是 JSON。
  • @mario 我如何解析你能给我任何例子或参考。 ?
  • 你为什么不先用一个例子来具体化你的问题呢?
  • 我已经添加了网站的链接希望你能理解我的问题
  • 是的,很容易看到它通过 Firebug 或 Developer Tools 或 Dragonfly 加载了额外的资源。它会轮询GET /au/search/loadpage?cp=0&amp;area=2&amp;st=&amp;rz=&amp;rzc=&amp;f=&amp;ft=Basic&amp;………… 以获取更多 HTML 内容。现在,该 URL 的构造方式取决于 JavaScript 实现。要求太宽泛了。你必须自己弄清楚这一点。 (毕竟这是你的抓取项目。)

标签: php web-scraping infinite-scroll


【解决方案1】:

这是使用ajax拉取内容的链接,

https://www.lyoness.com/au/search/loadpage?cp=1&area=2&st=&rz=&rzc=&f=&ft=Basic&c=AU&r=12&la=en-AU&s=Default&isPreviousPageClick=false&_=

cp 变量是您正在加载的页码。这意味着如果仍有内容返回,您可以遍历所有数字。

您无法使用 php 访问此链接,因为即使通过浏览器访问此链接也是不可能的,我尝试使用 ajax 并且它可以工作,这是您可以在页面控制台中键入并更改它将打印的 cp 的 ajax 代码ajax 内容,你可以添加一个有一些延迟的循环

$.ajax({
url:'https://www.lyoness.com/au/search/loadpage?cp=5&area=2&st=&rz=&rzc=&f=&ft=Basic&c=AU&r=12&la=en-AU&s=Default&isPreviousPageClick=false&_=',
success:function(data){
  console.log(data);
}
})

您可以在使用 jquery(这比使用 php 库很容易)抓取返回的数据后,通过 post 或 get 请求将返回的数据发布到您的服务器,并使用某种 API 保存到数据库或禁用跨域安全性浏览器中的选项。

编辑:

这是一个使用 CURL 检索第一页的 php 代码

    if (!function_exists('curl_init')){
            die('Sorry cURL is not installed!');
    }
    $url = 'https://www.lyoness.com/au/search/loadpage?cp=1&ft=Basic&c=AU&r=12&la=en-AU&s=Default';

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_ENCODING , "gzip");
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla-Djokage/1.0");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'X-Requested-With: XMLHttpRequest'
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    $output = curl_exec($ch);
    echo $output;
    //echo 'Curl error: ' . curl_error($ch);

    curl_close($ch);

您需要遍历 url 中的 cp 变量才能解析所有页面,还需要抓取 $output html 以获取所有变量并将它们保存到数据库中,我已经尝试了代码并且它可以工作美好的。我希望你能接受这个解决方案

【讨论】:

  • 谢谢@djokage,是否可以通过php脚本调用ajax?因为我必须使用php来实现scraper。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 2013-09-15
相关资源
最近更新 更多