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

Comment explorer et analyser des pages Web avec PHP

不言
Libérer: 2023-03-30 14:04:01
original
2505 Les gens l'ont consulté

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;;
?>
Copier après la connexion

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);
?>
Copier après la connexion

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);
?>
Copier après la connexion

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 et

. 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);
?>
Copier après la connexion

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);
Copier après la connexion

"(.*)" signifie tout et peut être interprété comme : "Analyser tout entre et

". $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 et

, 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.

Copier après la connexion

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 ;
}
?>
Copier après la connexion

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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal