gpt4 book ai didi

PHP抓取及分析网页的方法详解

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP抓取及分析网页的方法详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了PHP抓取及分析网页的方法。分享给大家供大家参考,具体如下:

抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开始吧! 。

首先,我首必须决定我们将抓取的URL地址。可以通过在脚本中设定或通过$QUERY_STRING传递。为了简单起见,让我们将变量直接设在脚本中.

?
1
2
3
<?php
$url = 'http://www.php.net' ;
?>

第二步,我们抓取指定文件,并且通过file()函数将它存在一个数组里.

?
1
2
3
4
<?php
$url = 'http://www.php.net' ;
$lines_array = file( $url );
?>

好了,现在在数组里已经有了文件了。但是,我们想分析的文本可能不全在一行里面。为了解决这个文件,我们可以简单地将数组$lines_array转化成一个字符串。我们可以使用implode(x,y)函数来实现它。如果在后面你想用explode(将字符串变量数组),将x设成"|"或"!"或其它类似的分隔符可能会更好。但是出于我们的目的,最好将x设成空格。y是另一个必要的参数,因为它是你想用implode()处理的数组.

?
1
2
3
4
5
<?php
$url = 'http://www.php.net' ;
$lines_array = file( $url );
$lines_string = implode( '' , $lines_array );
?>

现在,抓取工作就做完了,下面该进行分析了。出于这个例子的目的,我们想得到在<head>到</head>之间的所有东西。为了分析出字符串,我们还需要叫做正规表达式的东西.

?
1
2
3
4
5
6
<?php
$url = 'http://www.php.net' ;
$lines_array = file( $url );
$lines_string = implode( '' , $lines_array );
eregi ( "<head>(.*)</head>" , $lines_string , $head );
?>

让我们看一下代码。正如你所见,eregi()函数按下面的格式执行:

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

"(.*)"表示所有东西,可以解释为,"分析在<head>和</head>间的所以东西"。$lines_string是我们正在分析的字符串,$head是分析后的结果存放的数组.

最后,我们可以输数据。因为仅在<head>和</head>间存在一个实例,我们可以安全的假设数组中仅存在着一个元素,而且就是我们想要的。让我们把它打印出来吧.

?
1
2
3
4
5
6
<?php
$url = 'http://www.php.net' ;
$lines_array = file( $url );
$lines_string = implode( '' , $lines_array ); eregi ( "<head>(.*)</head>" , $lines_string , $head );
echo $head [0];
?>

这就是全部的代码了.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?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' id="codetool">

希望本文所述对大家PHP程序设计有所帮助.

  • PHP
  • 网页
  • 抓取
  • 延伸 · 阅读

    • 2021-01-12PHP调用存储过程返回值不一致问题的解决方法分
    • 2021-01-12基于PHP实现通过照片获取ip地址
    • 2021-01-12PHP中addslashes与mysql_escape_string的区别分析
    • 2021-01-12PHP引用的调用方法分析
    • 2021-01-12PHP常见错误提示含义解释(实用!值得收藏)
    • 2021-01-12使用ltrace工具跟踪PHP库函数调用的方法
    精彩推荐
    • PHP教程PHP面向对象程序设计之接口的继承定义与用法详解

      PHP面向对象程序设计之接口的继承定义与用法详解

      这篇文章主要介绍了PHP面向对象程序设计之接口的继承定义与用法,结合实例形式分析了php接口的概念、定义、使用方法及相关操作注意事项,需要的朋友可... 。

      天涯海角路 441 2019-07-15
    • PHP教程PHP的SQL注入实现(测试代码安全不错)

      PHP的SQL注入实现(测试代码安全不错)

      看黑客是如何入侵的,我们写编写php代码的过程中,最好自己先测试效果。... 。

      PHP教程网 441 2019-11-18
    • PHP教程PHP 命名空间实例说明

      PHP 命名空间实例说明

      PHP 命名空间实例说明,需要的朋友可以参考下。... 。

      php教程网 459 2019-11-16
    • PHP教程php实现的发送带附件邮件类实例

      php实现的发送带附件邮件类实例

      这篇文章主要介绍了php实现的发送带附件邮件类,是php程序设计中非常常见的实用技巧,实例演示了邮件类及对应的demo示例,需要的朋友可以参考下... 。

      php中文网 295 2020-07-28
    • PHP教程php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错

      php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报

      这篇文章主要介绍了php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错 的相关资料,需要的朋友可以参考下... 。

      明月照亮天涯 485 2020-12-04
    • PHP教程PHP中捕获超时事件的方法实例

      PHP中捕获超时事件的方法实例

      这篇文章主要介绍了PHP中捕获超时事件的方法实例,本文直接给出示例代码,需要的朋友可以参考下... 。

      PHP之家 494 2020-09-04
    • PHP教程Thinkphp 框架扩展之Widget扩展实现方法分析

      Thinkphp 框架扩展之Widget扩展实现方法分析

      这篇文章主要介绍了Thinkphp 框架扩展之Widget扩展实现方法,结合实例形式分析了Thinkphp 框架Widget扩展概念、原理、实现方法及操作注意事项,需要的朋友可以... 。

      人生如初见_张默 403 2020-05-25
    • PHP教程PHP include_path设置技巧分享

      PHP include_path设置技巧分享

      当时候函数include(),require(),fopen_with_path()函数来寻找文件时候.在不设置include_path的情况下,这些函数打开文件时候默认的是以web根目录去寻找.当设置include_... 。

      PHP教程网 524 2019-12-03

    最后此篇关于PHP抓取及分析网页的方法详解的文章就讲到这里了,如果你想了解更多关于PHP抓取及分析网页的方法详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com