抓取javascript生成的网页数据

IT技术 javascript php html-parsing domdocument
2021-02-07 10:52:44

我的问题是:如何从这个网站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));
    }
}
2个回答

你需要看看PhantomJS

从他们的网站:

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

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


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

我同意,并感谢您的所有帮助。如果我得到任何结果,我会回帖。
2021-04-03 10:52:44

首先,你需要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";
}
我安装失败,将 ./composer.json 恢复到其原始内容。潜在原因: - 包名称中的拼写错误 - 根据您的最低稳定性设置,该包在足够稳定的版本中不可用,请参阅 < getcomposer.org/doc/04-schema.md#minimum-stability > 了解更多详细信息.
2021-03-30 10:52:44