获得本站免费赞助空间请点这里
返回列表 发帖

Html源文件中image标签的析取

今天介绍一种从指定网页源文件中析取image标签的的编程技巧,即从网页源文件中,解析出所有的插图文件名(包括图片路径),也就是标签<img src=".../... /abc.jpg"> 中的文件名".../.../abc.jpg"(有的可能是gif格式)。编程环境:PHP+Apache for Win98。  
1 s# H) L* W5 ~/ N& v
& r: F( s* m$ C1 B* D5 y2 ^# s  首先, 用文本编辑器新建一个PHP类型的文件:abstractSRCfrompage.php3。为了方便讲解,我们打算是在浏览器表单域中输入需要析取image标签的网页的URL(或本机文档),提交后执行析取操作,所以在该文件中,我们要建立一个用于输入网址的表单,举例如下: ! n) F9 D  B) r; Q

6 z2 u2 @2 r' v6 m  ~+ j0 R, B3 i; U
<form action=" abstractSRCfrompage.php3" method="post">
+ r; c3 e$ i2 s+ J9 A. e/ @0 M  输入网址<input type=text name=filename><br>+ u, k0 R6 Z" ]+ P1 o
  <input type=submit name=submit value="提交">
" S( L# O* R# u5 R0 P; O9 y  c</form>
2 f" a& d9 G0 g* {( l9 A. h0 m
$ v6 w8 m' N+ [. n! J# X& s" O& l. T9 `8 ]6 j$ A$ m4 [
  输入正确的网址,提交后表单信息被送到abstractSRCfrompage.php3页面,由于表单本身就在该页面,所以相当于被送到自身页面,下面我们需要编写析取处理的PHP代码,紧接着表单代码段后写入如下代码:
5 v6 a; M/ h5 l/ ~6 D0 G3 z. V% S8 t2 Y+ h$ g1 x
6 p0 K% l; r5 r3 M
<?php
$ J/ }5 M- X9 ]! H! sif ($filename!=""){# N& t! }6 C3 Y) v
$fp = fopen($filename, "r"); file://若输入不为空,开启本地或者远程档案;# I# q5 Y- k0 z/ ?3 Q% e! x+ r; K
while ($buffer = fgets($fp, 1024)) {
  g/ g4 q  P( ?/ Z+ l" `$ q3 C$source .=$buffer; }
7 l5 p0 |/ a0 |2 gfclose($fp);
5 `% E" F; `) a+ }$ afile://查找$source中是否有<img ...src=".../...gif | jpg"> 这样的标记
# e9 F3 P& C  k# M( Sif(eregi("(<img)+[^<>]+(src=")+[^*"<>|]+(.)+((gif)|(jpg))+(")",$source)) {
: z5 E  C+ _& m8 U, U1 t$ Recho "找到图片标签:)<br>";}
: H/ |# |. g1 o0 S4 Jelse{
/ a( D2 `0 V7 A1 K! Oecho "未发现图片标签:(<br>";}
! B5 M& k  ]4 x) E! w( Vfile://拆分,第一次用标签,<img ...src=拆分,得到了以图形文件名开头的数组,
. Q5 C) @  `$ W$splitres=split("((">)|())+(<img)+[^<>]+(src=")",$source);& M. a# j; U: j* ]) ^- i, d: O
echo "找到: $imagenums-1个图片<br>分别为:<br>";
9 {7 \8 B: f' ?+ p- efor($i=1;$i<sizeof($splitres);$i++){! `, O) }& a+ I0 a* _
file://二次拆分,用"拆分。因为文件名能含有",得到的拆分数组的第一个元素就是路径+文件名了;
0 ^! `# Q% |* nunset($imgname); // 再次使用前删除imgname变量;$ L! Z# n) z* W. k; o3 Y. B
$imgname=spliti(""",$splitres[$i]);//将析取的图片信息依次赋给imgname变量$ T; ?+ P7 d" e2 l* O
echo "$i=>".$imgname[0]."<br>"; file://输出析取的图片信息/ U2 q+ P% e- J1 r, K
}
, q+ A! U4 }+ }& Y0 [6 |}* K0 E8 X9 X+ }  v; M7 C1 V; x7 j
?>
7 L  [3 O: G2 g8 H8 d4 q+ b# p# @7 a2 _1 q; U% T) L
* A6 `: G; k) w& z# ]
  该段程序的设计思路是:PHP程式判断是否输入了档案名称(网址URL或本机档案名),若不为空则以只读方式打开该档案;接着使用函式fgets (fp,length)取得档案指标fp所指的行并传回该行内长度为length-1 的字串,上例中就是1024-1=1023;然后利用字串比对剖析函式ereg()查找$source中是否含有<img ...src=".../...gif | jpg"> 这样的标记(关于该函式在上篇中有详细的介绍);假如找到的话,则利用split()函式按一定的规则执行两次拆分,去掉标记中的<img…src=字符和"字符,结果得到数组 splitres,其中的每一个元素都是以图形路径+文件名开头的数组;用for循环在屏幕上输出每个数组的第一个元素值,即我们所需要的所有图形路径+ 文件名。1 B  e6 U6 q+ x) Z* e
( F9 ]; H. ]  C4 N! ?4 [
  其中函式sizeof($splitres)返回个数;在for循环中,依次将数组splitres的每个元素(也是数组)赋给数组变量imgname,并输出imgname的第一个元素值(为找到的一个图形路径+文件名),当执行下次循环时,删除变量imgname,达到重复使用的目的。大家可以仔细研究其中的奥妙。
' E+ u3 D* o9 d7 N- K) q, i8 n# g7 V
  好了,写好后,将abstractSRCfrompage.php3存到你的服务器指定目录下,启动Apache服务器,在浏览器中打开它,随便输入一个存在的网页名称或是远程URL,看看效果如何。
8 F( X' S& p2 k; z$ w: P7 S0 U
  如果有兴趣,你可以尝试析取HTML文档中的任意感兴趣的信息,如果稍加改装,做一个网站文本搜索引擎岂不更妙?

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