返回列表 发帖

Html源文件中image标签的析取

今天介绍一种从指定网页源文件中析取image标签的的编程技巧,即从网页源文件中,解析出所有的插图文件名(包括图片路径),也就是标签<img src=".../... /abc.jpg"> 中的文件名".../.../abc.jpg"(有的可能是gif格式)。编程环境:PHP+Apache for Win98。  
/ {5 |! R# {* ~. q! {" B6 \; Z
0 k* C8 W. S* Y1 H" s. ]1 H) L  首先, 用文本编辑器新建一个PHP类型的文件:abstractSRCfrompage.php3。为了方便讲解,我们打算是在浏览器表单域中输入需要析取image标签的网页的URL(或本机文档),提交后执行析取操作,所以在该文件中,我们要建立一个用于输入网址的表单,举例如下: 1 h( ?$ {7 U1 }- \" P

1 x$ z( g1 n" P. s$ ^8 C- ^& s7 a
& `9 Y1 M- V; @& ~) X  z! }<form action=" abstractSRCfrompage.php3" method="post">0 N6 `# p7 H* i
  输入网址<input type=text name=filename><br>, }( ~0 d- c$ S! h% R# U! S* ?
  <input type=submit name=submit value="提交">
9 O; A! S* u( c% q* O</form> $ y1 w$ |; Q; f+ Z
8 C+ U- H- }0 j) V/ b& V

+ L3 q7 j8 I4 U* g) Y0 {  输入正确的网址,提交后表单信息被送到abstractSRCfrompage.php3页面,由于表单本身就在该页面,所以相当于被送到自身页面,下面我们需要编写析取处理的PHP代码,紧接着表单代码段后写入如下代码:
! ^' H' }; [1 k: L, A# H. f5 y7 ?6 p8 r8 B. ^9 C; G" w: y/ c+ X

+ y! R) g; k$ g! y8 ^5 r3 z<?php3 y8 ?& \: v2 T- v
if ($filename!=""){
( f* N# T* l) g' D1 V1 A! R4 n* B$fp = fopen($filename, "r"); file://若输入不为空,开启本地或者远程档案;# b) b0 K( b/ x; e: D, I
while ($buffer = fgets($fp, 1024)) {+ ~8 e. F% W2 H2 X9 @
$source .=$buffer; }2 [  n% S' E! h4 U
fclose($fp);
+ |$ N9 n7 O9 qfile://查找$source中是否有<img ...src=".../...gif | jpg"> 这样的标记
* l) Y8 ]1 l+ j& n/ o3 K! R' Cif(eregi("(<img)+[^<>]+(src=")+[^*"<>|]+(.)+((gif)|(jpg))+(")",$source)) {* Z3 e& b9 |. \
echo "找到图片标签:)<br>";}4 a3 X8 {8 B* v! P' w* c7 O! D) }
else{
9 ^. r" i/ G& \" A9 {: Vecho "未发现图片标签:(<br>";}
0 ?! }* P- d) ~  jfile://拆分,第一次用标签,<img ...src=拆分,得到了以图形文件名开头的数组,% H- e/ ^. I# b2 F: L
$splitres=split("((">)|())+(<img)+[^<>]+(src=")",$source);
& Q% k  ~2 O- u% q% kecho "找到: $imagenums-1个图片<br>分别为:<br>";
/ P  }% O, c% o2 ]9 [8 H' }/ Q# gfor($i=1;$i<sizeof($splitres);$i++){
; c( ]& x( v: H! Z" nfile://二次拆分,用"拆分。因为文件名能含有",得到的拆分数组的第一个元素就是路径+文件名了;
) M0 X" x; F$ Punset($imgname); // 再次使用前删除imgname变量;
8 R# k, z$ o# W( W& |2 t- C  ~7 V$imgname=spliti(""",$splitres[$i]);//将析取的图片信息依次赋给imgname变量- U& C' t( o3 k0 j& {
echo "$i=>".$imgname[0]."<br>"; file://输出析取的图片信息* h$ W* K) O# b8 G
}
" @3 q, I% L0 L}
/ \4 M7 a% \" c/ j6 j?>4 o! o. q+ L4 ?8 O

; p2 ?3 ^5 T  {: Z
5 G2 x, j* j7 ^6 N6 n  该段程序的设计思路是:PHP程式判断是否输入了档案名称(网址URL或本机档案名),若不为空则以只读方式打开该档案;接着使用函式fgets (fp,length)取得档案指标fp所指的行并传回该行内长度为length-1 的字串,上例中就是1024-1=1023;然后利用字串比对剖析函式ereg()查找$source中是否含有<img ...src=".../...gif | jpg"> 这样的标记(关于该函式在上篇中有详细的介绍);假如找到的话,则利用split()函式按一定的规则执行两次拆分,去掉标记中的<img…src=字符和"字符,结果得到数组 splitres,其中的每一个元素都是以图形路径+文件名开头的数组;用for循环在屏幕上输出每个数组的第一个元素值,即我们所需要的所有图形路径+ 文件名。9 S9 K. d% S  f% Q2 [0 X
0 a- p6 O0 j) p- a3 r
  其中函式sizeof($splitres)返回个数;在for循环中,依次将数组splitres的每个元素(也是数组)赋给数组变量imgname,并输出imgname的第一个元素值(为找到的一个图形路径+文件名),当执行下次循环时,删除变量imgname,达到重复使用的目的。大家可以仔细研究其中的奥妙。/ [4 A% _9 _1 J9 R9 B0 V2 x

7 n0 T8 y% J2 `  好了,写好后,将abstractSRCfrompage.php3存到你的服务器指定目录下,启动Apache服务器,在浏览器中打开它,随便输入一个存在的网页名称或是远程URL,看看效果如何。
" W) k! B2 j6 r6 e' U* h! j8 t0 b5 q! C6 w. c, N+ m
  如果有兴趣,你可以尝试析取HTML文档中的任意感兴趣的信息,如果稍加改装,做一个网站文本搜索引擎岂不更妙?

返回列表
【捌玖网络】已经运行: