由JavaScript生成刮网页数据(Scrape web page data generated

2019-06-18 08:42发布

我的问题是:如何从这个网站抽取数据http://vtis.vn/index.aspx但是,直到你点击例如“DANH国家文物局湛”的数据未显示。 我已经很努力尝试和细心,当你点击“DANH国家文物局湛”这是触发一些javascript函数的js的功能之一是从服务器获取数据,并将其插入标签/固定支架,并在onclick事件这一点,你可以使用像Firefox来检查数据,是的,数据显示到网页上的用户/观众。 所以,再一次,我们怎么能放弃编程这个数据?

我写了一个废弃的功能,但ofcourse,直到我上的按钮“DANH国家文物局湛”,点击它没有得到我想要的,因为数据没有可用的数据

                <?php
                      $Page = file_get_contents('http://vtis.vn/index.aspx');
                $dom_document = new DOMDocument();
                  $dom_document->loadHTML($Page);
                              $dom_xpath_admin = new DOMXpath($dom_document_admin);
                   $elements = $dom_xpath->query("*//td[@class='IconMenuColumn']");
                              //
                          foreach ($elements as $element) {
                            $nodes = $element->childNodes;
                            foreach ($nodes as $node) {
                                         echo (mb_convert_encoding($node->c14n(), 'iso-8859-1', mb_detect_encoding($content, 'UTF-8', true)));
                               }
                          }
                         }

谢谢你,StackOverflow的是一个伟大的地方。 D.

Answer 1:

你需要看看PhantomJS 。

从他们的网站:

PhantomJS是一个无头WebKit的使用JavaScript API。 它有各种Web标准和快速的本地支持:DOM处理,CSS选择器,JSON,Canvas和SVG。

使用可脚本“浏览器”,以与该页面互动并刮去你需要的数据的API。 然后,你可以做任何你需要它; 其中包括将它传递给一个PHP脚本,如果必要的。


话虽这么说,如果可能的话尽量不要“刮”的数据。 如果有一个Ajax调用的页面正在,也许有你可以使用,而不是一个API? 如果没有,也许你可以说服他们的。 这当然会容易得多,比屏幕抓取更容易维护。



Answer 2:

首先,你需要PhantomJS:

  • wget的https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
  • 焦油xvf命令phantomjs-2.1.1-Linux的x86_64.tar.bz2
  • CP phantomjs-2.1.1-Linux的x86_64的/ bin中/ phantomjs在/ usr / local / bin目录

其次,你需要PHP phantomjs:

  1. 安装作曲家(如果你的服务器上不存在)
  2. 安装包(PHP phantomjs),你可能会在本指南上一看:

https://github.com/jonnnnyw/php-phantomjs http://jonnnnyw.github.io/php-phantomjs/4.0/2-installation/

第三,加载包到你的脚本:需要(“供应商/ autoload.php”);

最后,而不是file_get_content,你将加载通过phantomjs页面

$client = Client::getInstance();
    $client->getEngine()->setPath('/usr/local/bin/phantomjs');


    $client = Client::getInstance();

    $request  = $client->getMessageFactory()->createRequest();
    $response = $client->getMessageFactory()->createResponse();

    $request->setMethod('GET');
    $request->setUrl('https://www.your_page_embeded_ajax_request');

    $client->send($request, $response);

    if($response->getStatus() === 200) {
        echo "Do something here";
    }


文章来源: Scrape web page data generated by javascript