2015-11-02 2 views
5

Ich möchte einige Informationen einer Webseite verschrotten. Es verwendet eine Tabelle Layout-Struktur.PHP webscraping mit einfachen HTML-dom nicht funktioniert, wenn die Ausgabe ist nicht in der Lage html-Tags

Ich möchte die dritte Tabelle in der verschachtelten Tabellen-Layout extrahieren, die eine Reihe von verschachtelten Tabellen enthält .each .Aber den Code ein Ergebnis Veröffentlichung funktioniert nicht

include('simple_html_dom.php'); 
$url = 'http://exams.keralauniversity.ac.in/Login/index.php?reslt=1'; 
$html = file_get_contents($url); 
$result =$html->find("table", 2); 
echo $result; 

I Curl-Gebraucht Webseite zu extrahieren, aber die Problem ist, dass seine Tags nicht in der richtigen Reihenfolge sind, so dass es nicht mit einem einfachen dom-Element extrahiert werden kann.

function curl($url) { 
      $ch = curl_init(); // Initialising cURL 
      curl_setopt($ch, CURLOPT_URL,$url); // Setting cURL's URL option with the $url variable passed into the function 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Setting cURL's option to return the webpage data 
      $data = curl_exec($ch); // Executing the cURL request and assigning the returned data to the $data variable 
      curl_close($ch); // Closing cURL 
      return $data; // Returning the data from the function 
     } 

      function scrape_between($data, $start, $end){ 
     $data = stristr($data, $start); // Stripping all data from before $start 
     $data = substr($data, strlen($start)); // Stripping $start 
     $stop = stripos($data, $end); // Getting the position of the $end of the data to scrape 
     $data = substr($data, 0, $stop); // Stripping all data from after and including the $end of the data to scrape 
     return $data; // Returning the scraped data from the function 
    } 
      $scraped_page = curl($url); // Executing our curl function to scrape the webpage http://www.example.com and return the results into the $scraped_website variable 

      $scraped_data = scrape_between($scraped_page, ' </html>', '</table></td><td></td></tr> 
    </table>'); 
echo $scraped_data; 
$myfile = fopen("newfile.html", "w") or die("Unable to open file!"); 

fwrite($myfile, $scraped_data); 
fclose($myfile); 

Wie das Ergebnis kratzen und die pdf

Antwort

5

Einfache HTML-Dom, die HTML verarbeiten kann nicht speichern. So erste Schalter this library, Dann tun:

require_once('advanced_html_dom.php'); 

$dom = file_get_html('http://exams.keralauniversity.ac.in/Login/index.php?reslt=1'); 

$rows = array(); 
foreach($dom->find('tr.Function_Text_Normal:has(td[3])') as $tr){ 
    $row['num'] = $tr->find('td[2]', 0)->text; 
    $row['text'] = $tr->find('td[3]', 0)->text; 
    $row['pdf'] = $tr->find('td[3] a', 0)->href; 
    if(preg_match_all('/\d+/', $tr->parent->find('u', 0)->text, $m)){ 
    list($row['day'], $row['month'], $row['year']) = $m[0]; 
    } 

    // uncomment next 2 lines to save the pdf 
    // $filename = preg_replace('/.*\//', '', $row['pdf']); 
    // file_put_contents($filename, file_get_contents($row['pdf'])); 
    $rows[] = $row; 
} 
var_dump($rows); 
+0

haben Sie getestet es? und kleine Erklärung –

+0

Ja, ich habe es getestet. Es ist alles CSS (plus jQuery-Erweiterungen). 'td [2]' zum Beispiel bedeutet das zweite 'td' – pguardiario

+0

Ich habe es upvoted können Sie mir mit einem regulären Ausdruck helfen, das veröffentlichte Datum zu extrahieren? –

1

Find a sample code 
 

 

 
    ?php 
 
     // Defining the basic cURL function 
 
     function curl($url) { 
 
      $ch = curl_init(); // Initialising cURL 
 
      curl_setopt($ch, CURLOPT_URL, $url); // Setting cURL's URL option with the $url variable passed into the function 
 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Setting cURL's option to return the webpage data 
 
      $data = curl_exec($ch); // Executing the cURL request and assigning the returned data to the $data variable 
 
      curl_close($ch); // Closing cURL 
 
      return $data; // Returning the data from the function 
 
     } 
 
    ?> 
 

 
    <?php 
 
     $scraped_website = curl("http://www.example.com"); // Executing our curl function to scrape the webpage http://www.example.com and return the results into the $scraped_website variable 
 
$result =$substring($scraped_website ,11,7); //change values 11,7 for table 
 
echo $result; 
 
    ?>

+0

ich versucht hatte, curl früher und es ist meine Schuld, dass ich es hier nicht erwähnt habe curl meine geschabt Seite erfolgreich zurückgegeben wird, aber es kann nicht, weil es mit einfachen hitml dom Elemente analysiert werden irgendwie ist out of shape.There gibt mehrere Body-Tags und es gibt Skript in und andere Unordnung .In Kürze kann ich es nicht kratzen, auch wenn es die durcheinander html-Tags zurückgibt und in Bezug auf negative Abstimmung kann ich nicht abwählen, bis Sie es bearbeiten –