从webpages.aspx中删除由服务器端JavaScript生成的数据
我的问题是:如何从本网站刮取数据http://vtis.vn/index.aspx但是直到您点击“Danhsáchchậm”才会显示数据。 我已经非常努力和小心地尝试了,当你点击“Danhsáchchậm”时,这是触发一些javascript函数的onclick事件,其中一个js函数是从服务器获取数据并将其插入到标签/占位符处这一点你可以使用像Firefox的东西来检查数据,是的,数据显示给网页上的用户/观众。 那么,我们怎样才能以编程方式取消这些数据呢?
我写了一个报废function,但是它没有得到我想要的数据,因为数据不可用,直到我点击button“Danhsáchchậ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))); } } }
谢谢你,StackOverflow是一个很好的地方。 D.
你需要看PhantomJS 。
从他们的网站:
PhantomJS是一个带JavaScript API的无头WebKit。 它支持各种网页标准,包括DOM处理,CSSselect器,JSON,Canvas和SVG。
使用API,您可以编写“浏览器”来与该页面进行交互,并抓取您所需的数据。 然后你可以用它做任何你需要的东西; 包括必要时将其传递给PHP脚本。
这就是说,如果可能的话尽量不要“刮”数据。 如果有一个Ajax调用的页面,也许有一个API,你可以使用呢? 如果没有,也许你可以说服他们做一个。 这当然会比屏幕抓取更容易和更容易维护。
首先,你需要PhantomJS:
- 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 php(如果你的服务器上不存在)
- 安装包(PHP phantomjs),你可能会看看这个指南:
https://github.com/jonnnnyw/php-phantomjs http://jonnnnyw.github.io/php-phantomjs/4.0/2-installation/
第三,加载你的脚本包:require('vendor / 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"; }