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

Html源文件中image标签的析取

今天介绍一种从指定网页源文件中析取image标签的的编程技巧,即从网页源文件中,解析出所有的插图文件名(包括图片路径),也就是标签<img src=".../... /abc.jpg"> 中的文件名".../.../abc.jpg"(有的可能是gif格式)。编程环境:PHP+Apache for Win98。  ( r  T) y7 I( u/ _
4 B5 p$ g7 U; [- o/ i: i: t4 @! Z
  首先, 用文本编辑器新建一个PHP类型的文件:abstractSRCfrompage.php3。为了方便讲解,我们打算是在浏览器表单域中输入需要析取image标签的网页的URL(或本机文档),提交后执行析取操作,所以在该文件中,我们要建立一个用于输入网址的表单,举例如下:
$ v8 B9 }. a% x8 c% d7 V6 p  b$ _7 P: [/ g

. N8 X- e& A1 y+ ?6 S' W<form action=" abstractSRCfrompage.php3" method="post">
5 g6 k! I- p$ d* n2 l: G" A( ?8 O  输入网址<input type=text name=filename><br>
  i% T, L2 ^4 ]3 a+ ?  <input type=submit name=submit value="提交">
  c3 H/ L. A* [3 [+ j5 r</form> - l6 {* l! o# D
. B* P* v4 e7 }) U5 `- a

4 J) I; G; _9 K* x; d  输入正确的网址,提交后表单信息被送到abstractSRCfrompage.php3页面,由于表单本身就在该页面,所以相当于被送到自身页面,下面我们需要编写析取处理的PHP代码,紧接着表单代码段后写入如下代码:
. A, y) U& H% Z& n# _
+ S# J# E+ _/ g% V% U( d  F, R% m
<?php
& a3 D! }( A" j- J4 Qif ($filename!=""){
7 F! d/ {: g9 |$ B( b" A+ V3 r$fp = fopen($filename, "r"); file://若输入不为空,开启本地或者远程档案;
( |6 w+ _& V" a, z6 u( n9 Q: cwhile ($buffer = fgets($fp, 1024)) {
5 a5 M- A5 Q% W$ `+ j! T$source .=$buffer; }
% j5 a8 ]  _# Rfclose($fp);
# |5 B% N8 A! C) l5 ^5 efile://查找$source中是否有<img ...src=".../...gif | jpg"> 这样的标记
6 u7 H- G0 a6 lif(eregi("(<img)+[^<>]+(src=")+[^*"<>|]+(.)+((gif)|(jpg))+(")",$source)) {
2 J6 i$ I( s; u$ |) ^echo "找到图片标签:)<br>";}
" I3 M* L( U. c. V, H9 b0 celse{
# l& Q+ [6 c  E5 F. _echo "未发现图片标签:(<br>";}( |! e1 x4 H, B7 w/ }, ^
file://拆分,第一次用标签,<img ...src=拆分,得到了以图形文件名开头的数组,
( g, e* s4 l' q$splitres=split("((">)|())+(<img)+[^<>]+(src=")",$source);
: @6 p" @1 \+ @) }echo "找到: $imagenums-1个图片<br>分别为:<br>";
( p1 v0 O3 b! @- ^' e. Xfor($i=1;$i<sizeof($splitres);$i++){, Y. A  z4 I7 O9 z. m" [& o
file://二次拆分,用"拆分。因为文件名能含有",得到的拆分数组的第一个元素就是路径+文件名了;# I: Q) a5 l* x
unset($imgname); // 再次使用前删除imgname变量;
. v' D# Z, a2 \4 d$imgname=spliti(""",$splitres[$i]);//将析取的图片信息依次赋给imgname变量
8 p. b% P- L8 v4 ~) K  @; Becho "$i=>".$imgname[0]."<br>"; file://输出析取的图片信息8 ]8 _" A7 [# \9 @0 ^! R
}4 t( p/ _: P& b$ j& a8 F
}# k9 `& T, t( k4 Z! f- h8 J4 ]
?>9 ^! o4 I) d& w# a9 E0 D" p: H

: e1 a7 K5 H. U0 ?; b& x/ u9 ~) T8 f; I
  该段程序的设计思路是:PHP程式判断是否输入了档案名称(网址URL或本机档案名),若不为空则以只读方式打开该档案;接着使用函式fgets (fp,length)取得档案指标fp所指的行并传回该行内长度为length-1 的字串,上例中就是1024-1=1023;然后利用字串比对剖析函式ereg()查找$source中是否含有<img ...src=".../...gif | jpg"> 这样的标记(关于该函式在上篇中有详细的介绍);假如找到的话,则利用split()函式按一定的规则执行两次拆分,去掉标记中的<img…src=字符和"字符,结果得到数组 splitres,其中的每一个元素都是以图形路径+文件名开头的数组;用for循环在屏幕上输出每个数组的第一个元素值,即我们所需要的所有图形路径+ 文件名。
5 b+ y2 S; S; [5 [9 v& X: Y' w
4 P/ O" }. _$ V  其中函式sizeof($splitres)返回个数;在for循环中,依次将数组splitres的每个元素(也是数组)赋给数组变量imgname,并输出imgname的第一个元素值(为找到的一个图形路径+文件名),当执行下次循环时,删除变量imgname,达到重复使用的目的。大家可以仔细研究其中的奥妙。1 b6 y8 z+ E$ M8 f) f" H
) d9 d% w% \0 y7 L1 Q
  好了,写好后,将abstractSRCfrompage.php3存到你的服务器指定目录下,启动Apache服务器,在浏览器中打开它,随便输入一个存在的网页名称或是远程URL,看看效果如何。
& t) V5 O8 R# p" a, C' K( d, [7 H
  如果有兴趣,你可以尝试析取HTML文档中的任意感兴趣的信息,如果稍加改装,做一个网站文本搜索引擎岂不更妙?

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