6

我的问题是:如何从这个网站http://vtis.vn/index.aspx抓取数据但是直到你点击例如“Danh sách chậm”时才会显示数据。我已经非常努力和仔细地尝试过,当您单击“Danh sách chậm”时,这是触发一些 javascript 函数的 onclick 事件,其中一个 js 函数是从服务器获取数据并将其插入标签/占位符并在此时您可以使用 Firefox 之类的工具来检查数据,是的,数据会在网页上显示给用户/查看者。再说一遍,我们如何以编程方式废弃这些数据?

我写了一个报废功能,但它当然没有得到我想要的数据,因为在我点击按钮“Danh sách chậm”之前数据不可用

<?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));
    }
}
4

2 回答 2

6

您需要查看PhantomJS

从他们的网站:

PhantomJS 是一个带有 JavaScript API 的无头 WebKit。它具有对各种 Web 标准的快速和原生支持:DOM 处理、CSS 选择器、JSON、Canvas 和 SVG。

使用 API,您可以编写“浏览器”脚本以与该页面交互并抓取您需要的数据。然后你可以用它做任何你需要的事情;如有必要,包括将其传递给 PHP 脚本。


话虽如此,如果可能的话,尽量不要“抓取”数据。如果页面正在进行 ajax 调用,也许您可​​以使用 API?如果没有,也许你可以说服他们做一个。这当然比屏幕抓取更容易且更易于维护。

于 2012-10-08T16:58:11.147 回答
5

首先,您需要PhantomJS。Linux 上建议的安装方法:

wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar 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 包。假设您已经安装了Composer

composer require jonnyw/php-phantomjs

或按照此处的安装文档进行操作。

第三,将包加载到您的脚本中,而不是file_get_contents,您将通过 PhantomJS 加载页面

<?php
require ('vendor/autoload.php');

$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";
}
于 2017-01-02T06:20:14.040 回答