Home  >  Article  >  Backend Development  >  Detailed explanation of how to crawl and analyze web pages with PHP, detailed explanation of php crawling and analysis_PHP tutorial

Detailed explanation of how to crawl and analyze web pages with PHP, detailed explanation of php crawling and analysis_PHP tutorial

WBOY
WBOYOriginal
2016-07-12 08:53:27878browse

Detailed explanation of the method of crawling and analyzing web pages with PHP, detailed explanation of php crawling and analysis

This article describes the method of crawling and analyzing web pages with PHP. Share it with everyone for your reference, the details are as follows:

Crawling and analyzing a file is very simple. This tutorial will take you step by step through an example to implement it. Let's get started!

First, we must decide which URL addresses we will crawl. This can be set in a script or passed via $QUERY_STRING. For simplicity, let's set the variable directly in the script.

<&#63;php
$url = 'http://www.php.net';
&#63;>

In the second step, we grab the specified file and store it in an array through the file() function.

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

Okay, now we have the files in the array. However, the text we want to analyze may not all be in one line. To resolve this file, we can simply convert the array $lines_array into a string. We can use the implode(x,y) function to achieve this. If you want to use explode later (array of string variables), it may be better to set x to "|" or "!" or other similar delimiter. But for our purposes, it's better to set x to a space. y is another necessary parameter because it is the array you want to process with implode().

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

Now that the crawling work is done, it’s time to analyze. For the purposes of this example, we want to get everything between 93f0f5c25f18dab9d176bd4f6de5d30e and 9c3bca370b5104690d9ef395f2c5f8d1. In order to parse out the string, we also need something called a regular expression.

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

Let’s take a look at the code. As you can see, the eregi() function is executed in the following format:

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

"(.*)" means everything, which can be interpreted as, "analyze everything between 93f0f5c25f18dab9d176bd4f6de5d30e and 9c3bca370b5104690d9ef395f2c5f8d1". $lines_string is the string we are analyzing, and $head is the array where the analyzed results are stored.

Finally, we can enter the data. Since there is only one instance between 93f0f5c25f18dab9d176bd4f6de5d30e and 9c3bca370b5104690d9ef395f2c5f8d1, we can safely assume that there is only one element in the array, and it is the one we want. Let's print it out.

<&#63;php
$url = 'http://www.php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array); eregi("<head>(.*)</head>", $lines_string, $head);
echo $head[0];
&#63;>

That’s all the code.

<&#63;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 = '/^http:////[^//].+$/' ;
  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 = '/^(#|<a href="http://lib.csdn.net/base/18" class='replace_word' title="JavaScript知识库" target='_blank' style='color:#df3434; font-weight:bold;'>JavaScript</a>.*&#63;|ftp:////.+|http:////.+|.*&#63;href.*&#63;|play.*&#63;|index.*&#63;|.*&#63;asp)+$/i';
   //$reg = '/^(down.*&#63;/.html|/d+_/d+/.htm.*&#63;)$/i';
   $rex = "/([hH][rR][eE][Ff])/s*=/s*['/"]*([^>'/"/s]+)[/"'>]*/s*/i" ;
   $reg = '/^(down.*&#63;/.html)$/i' ;
   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*['/"]*([^>'/"/s]+)[/"'>]*/s*(.*&#63;<//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 ;
}
&#63;>

Readers who are interested in more PHP-related content can check out the special topics of this site: "Summary of PHP Regular Expression Usage", "Summary of PHP Ajax Skills and Applications", "Summary of PHP Operations and Operator Usage", "PHP Network Summary of Programming Skills", "Introduction Tutorial on PHP Basic Syntax", "Summary of PHP Office Document Operation Skills (Including Word, Excel, Access, PPT)", "Summary of PHP Date and Time Usage", "Introduction Tutorial on PHP Object-Oriented Programming" , "php string (string) usage summary", "php mysql database operation introductory tutorial" and "php common database operation skills summary"

I hope this article will be helpful to everyone in PHP programming.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1123830.htmlTechArticleDetailed explanation of PHP crawling and analysis of web pages, detailed explanation of PHP crawling analysis. This article describes PHP crawling and analysis with examples. web method. Share it with everyone for your reference, the details are as follows: Crawl and analyze...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn