2017-08-12 59 views
1

我需要用PHP来刮这个HTML页面加载的值...Scaping IFrame的HTML页面使用Ajax请求

http://www.cittadellasalute.to.it/index.php?option=com_content&view=article&id=6786:situazione-pazienti-in-pronto-soccorso&catid=165:pronto-soccorso&Itemid=372 

里面......我需要提取的数字为行“二队”, “Giallo”,Verde“和”Bianco“(请注意,这些数字是动态的,因此它们可以在刷新页面时进行更改,但这并不重要....)。

我已经看到这些行是在一些IFrame中(例如... http://listeps.cittadellasalute.to.it/?id=01090201),并使用ajax请求加载值(例如http://listeps.cittadellasalute.to.it/gtotal.php?id=01090101)。

是否有一些解决方案直接刮(我想避免解析奇异的jsons ....),这些值从原始的HTML页面使用PHP和$ xpath-> query?

建议/例子?

回答

1

我认为问题是这些值不在原始页面中,它们是在页面加载后生成的。所以你需要使用一些能够兑现所有Javascript功能的东西(比如Selinium webdriver),这对你想做的事情有点矫枉过正(我认为)。直接处理IFrame更容易。

您可以提取I帧的URL的从原来的网页...

$url = "http://www.cittadellasalute.to.it/index.php?option=com_content&view=article&id=6786:situazione-pazienti-in-pronto-soccorso&catid=165:pronto-soccorso&Itemid=372"; 
$pageContents = file_get_contents($url); 
$page = simplexml_load_string($pageContents, "SimpleXMLElement", LIBXML_NOERROR | LIBXML_ERR_NONE); 

$ns = $page->getDocNamespaces(); 
$page->registerXPathNamespace('def', array_values($ns)[0]); 
$iframes = $page->xpath("//def:iframe"); 
foreach ($iframes as $frame) { 
    echo "iframe:".$frame['src'].PHP_EOL; 
} 

其中给出(刚才)

iframe:http://listeps.cittadellasalute.to.it/?id=01090101 
iframe:http://listeps.cittadellasalute.to.it/?id=01090201 
iframe:http://listeps.cittadellasalute.to.it/?id=01090301 
iframe:http://listeps.cittadellasalute.to.it/?id=01090302 

然后,您可以处理这些页面。

+0

是的,我已经看到IFrames代码,并且他们使用php(例如http://listeps.cittadellasalute.to.it/gtotal.php?id=01090101)来加载值... I想要避免解析由php调用返回的4个单独的jsons .....可能它不可能直接做... – Cesare

+0

直接可能的唯一方法就是我会提到的是解释Javascript。您可能会找到替代方案,但同时您可以解决问题并继续前进。 –