Maison  >  Article  >  développement back-end  >  Comment explorer et analyser des pages Web avec PHP

Comment explorer et analyser des pages Web avec PHP

不言
不言original
2018-06-07 15:45:522488parcourir

Cet article présente principalement la méthode d'exploration et d'analyse des pages Web PHP. Il analyse en détail les principes et les techniques d'analyse de l'exploration Web PHP sous forme d'exemples. Les amis dans le besoin peuvent se référer à

Les exemples. dans cet article, nous expliquons comment explorer et analyser des pages Web avec PHP. En le partageant avec tout le monde pour votre référence, les détails sont les suivants :

Explorer et analyser un fichier est très simple. Ce tutoriel vous guidera étape par étape à travers un exemple pour le mettre en œuvre. Commençons !

Tout d’abord, nous devons décider quelles adresses URL nous allons explorer. Cela peut être défini dans un script ou transmis via $QUERY_STRING. Pour plus de simplicité, définissons la variable directement dans le script.

<?php
$url = &#39;http://www.php.net&#39;;
?>

Dans la deuxième étape, nous récupérons le fichier spécifié et le stockons dans un tableau via la fonction file().

<?php
$url = &#39;http://www.php.net&#39;;
$lines_array = file($url);
?>

D'accord, nous avons maintenant le fichier dans le tableau. Cependant, le texte que nous souhaitons analyser ne tient peut-être pas entièrement sur une seule ligne. Pour résoudre ce fichier, nous pouvons simplement convertir le tableau $lines_array en chaîne. Nous pouvons utiliser la fonction implode(x,y) pour y parvenir. Si vous souhaitez utiliser l'explosion plus tard (tableau de variables de chaîne), il peut être préférable de définir x sur "|" ou "!" ou un autre délimiteur similaire. Mais pour nos besoins, il est préférable de définir x sur un espace. y est un autre paramètre nécessaire car c'est le tableau que vous souhaitez traiter avec implode().

<?php
$url = &#39;http://www.php.net&#39;;
$lines_array = file($url);
$lines_string = implode(&#39;&#39;, $lines_array);
?>

Maintenant que le travail d'exploration est terminé, il est temps d'analyser. Pour les besoins de cet exemple, nous souhaitons obtenir tout ce qui se trouve entre 93f0f5c25f18dab9d176bd4f6de5d30e et 9c3bca370b5104690d9ef395f2c5f8d1. Afin d'analyser la chaîne, nous avons également besoin de quelque chose appelé une expression régulière.

<?php
$url = &#39;http://www.php.net&#39;;
$lines_array = file($url);
$lines_string = implode(&#39;&#39;, $lines_array);
eregi("<head>(.*)</head>", $lines_string, $head);
?>

Jetons un coup d'œil au code. Comme vous pouvez le voir, la fonction eregi() est exécutée au format suivant :

eregi("<head>(.*)</head>", $lines_string, $head);

"(.*)" signifie tout et peut être interprété comme : "Analyser tout entre 93f0f5c25f18dab9d176bd4f6de5d30e et 9c3bca370b5104690d9ef395f2c5f8d1". $lines_string est la chaîne que nous analysons et $head est le tableau dans lequel les résultats analysés sont stockés.

Enfin, nous pouvons saisir les données. Puisqu'il n'y a qu'une seule instance entre 93f0f5c25f18dab9d176bd4f6de5d30e et 9c3bca370b5104690d9ef395f2c5f8d1, nous pouvons supposer en toute sécurité qu'il n'y a qu'un seul élément dans le tableau, et c'est celui que nous voulons. Imprimons-le.

C'est tout le code.

<?php
//获取所有内容url保存到文件
function get_index ( $save_file , $prefix = "index_" ){
   $count = 68 ;
   $i = 1 ;
  if ( file_exists ( $save_file )) @ unlink ( $save_file );
   $fp = fopen ( $save_file , "a+" ) or die( "Open " . $save_file . " failed" );
  while( $i < $count ){
     $url = $prefix . $i . ".htm" ;
    echo "Get " . $url . "..." ;
     $url_str = get_content_url ( get_url ( $url ));
    echo " OK/n" ;
     fwrite ( $fp , $url_str );
    ++ $i ;
  }
   fclose ( $fp );
}
//获取目标多媒体对象
function get_object ( $url_file , $save_file , $split = "|--:**:--|" ){
  if (! file_exists ( $url_file )) die( $url_file . " not exist" );
   $file_arr = file ( $url_file );
  if (! is_array ( $file_arr ) || empty( $file_arr )) die( $url_file . " not content" );
   $url_arr = array_unique ( $file_arr );
  if ( file_exists ( $save_file )) @ unlink ( $save_file );
   $fp = fopen ( $save_file , "a+" ) or die( "Open save file " . $save_file . " failed" );
  foreach( $url_arr as $url ){
    if (empty( $url )) continue;
    echo "Get " . $url . "..." ;
     $html_str = get_url ( $url );
    echo $html_str ;
    echo $url ;
    exit;
     $obj_str = get_content_object ( $html_str );
    echo " OK/n" ;
     fwrite ( $fp , $obj_str );
  }
   fclose ( $fp );
}
//遍历目录获取文件内容
function get_dir ( $save_file , $dir ){
   $dp = opendir ( $dir );
  if ( file_exists ( $save_file )) @ unlink ( $save_file );
   $fp = fopen ( $save_file , "a+" ) or die( "Open save file " . $save_file . " failed" );
  while(( $file = readdir ( $dp )) != false ){
    if ( $file != "." && $file != ".." ){
      echo "Read file " . $file . "..." ;
       $file_content = file_get_contents ( $dir . $file );
       $obj_str = get_content_object ( $file_content );
      echo " OK/n" ;
       fwrite ( $fp , $obj_str );
    }
  }
   fclose ( $fp );
}
//获取指定url内容
function get_url ( $url ){
   $reg = &#39;/^http:////[^//].+$/&#39; ;
  if (! preg_match ( $reg , $url )) die( $url . " invalid" );
   $fp = fopen ( $url , "r" ) or die( "Open url: " . $url . " failed." );
  while( $fc = fread ( $fp , 8192 )){
     $content .= $fc ;
  }
   fclose ( $fp );
  if (empty( $content )){
    die( "Get url: " . $url . " content failed." );
  }
  return $content ;
}
//使用socket获取指定网页
function get_content_by_socket ( $url , $host ){
   $fp = fsockopen ( $host , 80 ) or die( "Open " . $url . " failed" );
   $header = "GET /" . $url . " HTTP/1.1/r/n" ;
   $header .= "Accept: */*/r/n" ;
   $header .= "Accept-Language: zh-cn/r/n" ;
   $header .= "Accept-Encoding: gzip, deflate/r/n" ;
   $header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)/r/n" ;
   $header .= "Host: " . $host . "/r/n" ;
   $header .= "Connection: Keep-Alive/r/n" ;
   //$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-/r/n/r/n";
   $header .= "Connection: Close/r/n/r/n" ;
   fwrite ( $fp , $header );
   while (! feof ( $fp )) {
     $contents .= fgets ( $fp , 8192 );
   }
   fclose ( $fp );
   return $contents ;
}
//获取指定内容里的url
function get_content_url ( $host_url , $file_contents ){
   //$reg = &#39;/^(#|<a href="http://lib.csdn.net/base/18" class=&#39;replace_word&#39; title="JavaScript知识库" target=&#39;_blank&#39; style=&#39;color:#df3434; font-weight:bold;&#39;>JavaScript</a>.*?|ftp:////.+|http:////.+|.*?href.*?|play.*?|index.*?|.*?asp)+$/i&#39;;
   //$reg = &#39;/^(down.*?/.html|/d+_/d+/.htm.*?)$/i&#39;;
   $rex = "/([hH][rR][eE][Ff])/s*=/s*[&#39;/"]*([^>&#39;/"/s]+)[/"&#39;>]*/s*/i" ;
   $reg = &#39;/^(down.*?/.html)$/i&#39; ;
   preg_match_all ( $rex , $file_contents , $r );
   $result = "" ; //array();
   foreach( $r as $c ){
    if ( is_array ( $c )){
      foreach( $c as $d ){
        if ( preg_match ( $reg , $d )){ $result .= $host_url . $d . "/n" ; }
      }
    }
  }
  return $result ;
}
//获取指定内容中的多媒体文件
function get_content_object ( $str , $split = "|--:**:--|" ){
   $regx = "/href/s*=/s*[&#39;/"]*([^>&#39;/"/s]+)[/"&#39;>]*/s*(.*?<//b>)/i" ;
   preg_match_all ( $regx , $str , $result );
  if ( count ( $result ) == 3 ){
     $result [ 2 ] = str_replace ( "多媒体: " , "" , $result [ 2 ]);
     $result [ 2 ] = str_replace ( " " , "" , $result [ 2 ]);
     $result = $result [ 1 ][ 0 ] . $split . $result [ 2 ][ 0 ] . "/n" ;
  }
  return $result ;
}
?>

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun pour en savoir plus. contenu, veuillez faire attention au site Web chinois PHP !

Recommandations associées :

thinkphp implémente la fonction d'affichage de pagination

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn