我的问题是:如何从这个网站抓取数据http://vtis.vn/index.aspx但是直到你点击“Danhsáchchậm”才会显示数据。我非常努力和谨慎地尝试,当你点击“Danhsáchchậm”这是触发一些javascript函数的onclick事件时,其中一个js函数是从服务器获取数据并将其插入到标记/占位符中这一点你可以使用像firefox这样的东西来检查数据,是的,数据会显示给网页上的用户/查看者。那么,我们又如何以编程方式废弃这些数据呢?
我写了一个报废功能,但当然它没有得到我想要的数据,因为直到我点击“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。
答案 0 :(得分:6)
您需要查看PhantomJS。
从他们的网站:
PhantomJS是一款带有JavaScript API的无头WebKit。它有快速和 对各种Web标准的本机支持:DOM处理,CSS选择器, JSON,Canvas和SVG。
使用API,您可以编写“浏览器”脚本以与该页面进行交互并获取所需的数据。然后你可以随心所欲地做任何事情;包括在必要时将其传递给PHP脚本。
话虽如此,如果可能的话尽量不要“刮”数据。如果页面正在进行ajax调用,那么可能有一个API可以使用吗?如果没有,也许你可以说服他们做一个。这当然比屏幕抓取更容易,更易于维护。
答案 1 :(得分:3)
首先,你需要PhantomJS:
其次,你需要PHP phantomjs:
https://github.com/jonnnnyw/php-phantomjs http://jonnnnyw.github.io/php-phantomjs/4.0/2-installation/
第三步,将包加载到您的脚本: 要求(&#39; vendor / autoload.php&#39;);
最后,您将通过phantomjs
加载页面而不是file_get_content$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";
}