Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
刮取javascript生成的网页数据_Javascript_Php_Html Parsing_Domdocument - Fatal编程技术网

刮取javascript生成的网页数据

刮取javascript生成的网页数据,javascript,php,html-parsing,domdocument,Javascript,Php,Html Parsing,Domdocument,我的问题是:如何从这个网站上抓取数据,但直到你点击“Danh sách”等按钮,数据才会显示出来ậm”。当你点击“Danh sách”时,我已经非常努力和仔细地尝试过了ậm“这是一个onclick事件,它会触发一些javascript函数js函数之一是从服务器获取数据并将其插入到标签/占位符中,此时您可以使用类似firefox的工具来检查数据,是的,数据会显示在网页上给用户/查看者。那么,我们如何以编程方式废弃这些数据呢 我写了一个报废函数,但它当然没有得到我想要的数据,因为只有单击按钮“Dan

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

我写了一个报废函数,但它当然没有得到我想要的数据,因为只有单击按钮“Danh sách”才能获得数据ậm“

您需要查看

从他们的网站:

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

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


也就是说,如果可能的话,尽量不要“刮”数据。如果页面正在进行一个ajax调用,那么您可以使用一个API来代替它吗?如果没有,也许你可以说服他们做一个。当然,这比屏幕抓取更容易维护。

首先,您需要。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
第二,你需要一份工作。假设您已安装:

或者跟随

第三,将包加载到脚本中,而不是通过PhantomJS加载页面,而不是
file\u get\u contents

<?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";
}

可能需要使用phantomjs之类的工具来“单击”按钮。虽然你真的应该不惜一切代价避免“刮”数据。我不认为你的回答有帮助,但无论如何还是要谢谢你。我刮取数据是因为它属于公众或纳税人,也以不同的方式为公众服务。然后按照我的建议,使用phantomjs之类的工具,编写浏览器脚本。您所谈论的数据很可能是通过AJAX获取的。您必须模拟单击,等待AJAX更新页面,然后对其进行scape处理。我不知道这有什么用。谢谢,phantomjs是一个可能的解决方案。我同意,谢谢你的帮助。如果我得到任何结果,我会发回。我得到的安装失败,将./composer.json还原为其原始内容。潜在原因:-软件包名称输入错误-根据您的最低稳定性设置,软件包的版本不够稳定。有关更多详细信息,请参阅。
composer require jonnyw/php-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";
}