2010-05-18 14 views
5

Quelqu'un at-il une bonne solution pour gratter la source HTML d'une page avec un contenu (dans ce cas, les tableaux HTML) générés avec Javascript?Quelqu'un at-il une bonne solution pour gratter la source HTML d'une page avec un contenu (dans ce cas, les tableaux HTML) générés avec Javascript?

Un honteusement simple, si une solution viable en utilisant Crowbar:

<?php 
function get_html($url) // $url must be urlencode(d) 
{ 
$context = stream_context_create(array(
    'http' => array('timeout' => 120) // HTTP timeout in seconds 
    )); 
    $html = substr(file_get_contents('http://127.0.0.1:10000/?url=' . $url . '&delay=3000&view=browser', 0, $context), 730, -32); // substr removes HTML from the Crowbar web service, returning only the $url HTML 
return $html; 
} 
?> 

L'avantage d'utiliser Crowbar est que les tableaux seront rendus (et accessibles) grâce au navigateur basé sur mozilla-sans tête. Edit: a découvert que le problème avec Crowbar était une application en conflit, pas le temps d'arrêt du serveur, ce qui était juste une coïncidence.

Répondre

2

Ceci est une version plus robuste de l'exemple dans l'OP en utilisant cURL/Crowbar:

<?php 
function get_html($url) 
{ 
$curl = curl_init(); 
curl_setopt ($curl, CURLOPT_URL, 'http://127.0.0.1:10000/?url=' . $url . '&delay=3000&view=as-is'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$html = curl_exec ($curl); 
return $html; 
} 
?> 

devenais fréquentes "failed to open stream: HTTP demande a échoué" erreurs utilisant f_g_c avec plusieurs URL.

Aussi, rappelez-vous de l'urlencode $ url (par exemple 'http% 3A% 2F% 2Fwww.google.com'> 'http://www.google.com').

2

Eh bien, Java fournit des solutions pratiques, comme HtmlUint, qui interprète correctement Javascript, et par conséquent devrait permettre au html généré d'être visible.