2016-03-24 15 views
1

以下はid = Summaryの下にテキストを出力するPHPコードです。まあ、このスクリプトは他のwebistではうまく動作しますが、wikipediaではうまく動作しません。私は以下のエラーを貼り付けました。ウィキペディアはパーサースクリプトを制限していますか?もしそうなら、wikiから内容を解析して取得するためのソリューションはありますか? ありがとうございます。PHPクローラがwikipediaで動作しない

<?php 


function getElementByIdAsString($url, $id, $pretty = true) { 
    $doc = new DOMDocument(); 

    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    $result = curl_exec($ch); 


// var_dump($doc->loadHTMLFile($url)); die; 
error_reporting(E_ERROR | E_PARSE); 
    if(!$result) { 
     throw new Exception("Failed to load $url"); 
    } 
    $doc->loadHTML($result); 
    // Obtain the element 
    $element = $doc->getElementById($id); 

    if(!$element) { 
     throw new Exception("An element with id $id was not found"); 
    } 

    if($pretty) { 
     $doc->formatOutput = true; 
    } 

    // Return the string representation of the element 
    return $doc->saveXML($element); 
} 

//Here I am dispalying the output in bold text 
echo getElementByIdAsString('https://en.wikipedia.org/wiki/A_Brief_History_of_Time', 'Summary'); 
?> 

エラー:それはこれの重複がありますように

Fatal error: Uncaught exception 'Exception' with message 'Failed to load http://en.wikipedia.org/wiki/A_Brief_History_of_Time' in C:\xampp\htdocs\example2.php:25 Stack trace: #0 C:\xampp\htdocs\example2.php(49): getElementByIdAsString() #1 {main} thrown in C:\xampp\htdocs\example2.php on line 25 
+0

取得しているCURLエラーは何ですか? –

+0

Curlステータスコード? –

+0

http://php.net/manual/en/function.curl-error.phpこの関数は、CURL –

答えて

1

それはだ見えます:php crawler for wiki getting error

理由は、カール試みはこれだけの追加証明書を検証することです:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

問題を削除しますが、このすべてを使用するのに賢明です

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);