php-ページスクレイピングと正規表現では、必要なときに結果が得られません
この小さなwpベースのスクリプトを使用して、Webページをスクレイプし、preg_match_all()を使用して4つのキーワードの出現をカウントします。
これは、キーワードが含まれていることがわかっているURLのコードです:
<?php
$url ='http://www.leggioggi.it/2013/08/16/i-tre-amici-discutono-di-servizio-sanitario-casuale-e-differenze-nord-sud/';
$response = wp_remote_get($url);
$the_body = wp_remote_retrieve_body($response);
//echo htmlentities($the_body);
$matches = array();
$matches_count = preg_match_all("/gravidanz|preconcezional|prenatal|concepimento/i", $the_body, $matches);
var_dump ($matches_count);
var_dump ($matches);
?>
奇妙な問題が発生しています。一部のページでは、それらのページにキーワードが含まれていることがわかっていても、一致がゼロになりました。これらのページでは、 echo htmlentities($the_body);
の行のコメントを外すと問題が解決することに気付きました。もう一度コメントすると、奇妙なことが戻ってきます。
私の推測では、何らかのキャッシュメカニズムが関係しています。
PS:コードはテンプレートファイルではなく、ポッドフレームワークページに記述されています。
更新:
htmlentities行の後にvar_dump($the_body);
を配置しました。振る舞いは面白いです。 echo htmlentities($the_body);
がコメント化されている場合、var_dump($the_body);は空の文字列を返します。同じ行がアクティブな場合、var_dump($the_body);はページ全体のhtmlを返します。だから私は本当に何が起こっているのかわかりません!
解決済み: $ response varをチェックしました(私の悪いことはそれについて考えていません)、そして実際にリモートサーバーエラーがあったとき、エラーがwp_remote_get()によって返される応答で報告されたことを発見しました。 これが私が返すものです:
object(WP_Error)#30 (2) {
["errors"]=>
array(1) {
["http_request_failed"]=>
array(1) {
[0]=>
string(69) "Operation timed out after 5000 milliseconds with 25692 bytes received"
}
}
["error_data"]=>
array(0) {
}
}
答え :
解決策:
$ responsevarをチェックしました(私の悪いことは考えていません)。実際にリモートサーバーエラーが発生したことを発見しました。エラーはwp_remote_get()によって返される応答で報告されました。 。 これが私が返すものです:
object(WP_Error)#30 (2) {
["errors"]=>
array(1) {
["http_request_failed"]=>
array(1) {
[0]=>
string(69) "Operation timed out after 5000 milliseconds with 25692 bytes received"
}
}
["error_data"]=>
array(0) {
}
}
それで解決しました。 httpエラーをチェックし、限られた回数だけリクエストを繰り返し、正しい応答が得られない場合はリソースを無視する必要があります。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。