1 具体步骤
①使用file_get_contents()函数获取url的内容。
②浏览要采集的网页的源代码,找出要提取元素的物理位置。一定要仔细分析,找准位置。
③写正则表达式,将要匹配的img元素的src部分给提取出来。正则表达式的准确性我个人感觉是最最重要的。
④使用preg_match_all()函数,其中要写上参数$matches,从它里面我们可以拿图片的地址(src)。关于这个函数的使用,一定要熟悉。
⑤我们提取的知识图片的链接地址,若要向在网页上显示图片的话,还需要给这个地址套上一个<img src="">的标签,再使用echo()函数输出即可。好了,大功告成。
下面是我自己写的一个采集携程网的例子。
$url= "http://hotels.ctrip.com/hotel/guangzhou32/star3"; $fcontent= file_get_contents( $url); $pattern="/<img\sname=\"hotelpic\"(.*)src=\"http:\/\/pic.c-ctrip.com\/common\/pic_alpha.gif\"\s_src=\"(.*)\"><im/"; preg_match_all ( $pattern,$fcontent,$matches); foreach($matches[2] as$val){ echo"<img src=\"$val\">"; }
2 preg_match_all()函数的使用
具体的情况可以查看PHP手册,这里我主要讲一下$matches之后的那个参数。
PREG_SET_ORDER选项:
1 将$matches成为一个2维数组,
[0]关于第一次匹配上的记录信息,$matches[0][0]为匹配的全部字符串,然后才是$matches[0][1]、$matches[0][2]、$matches[0][3]一次分别为各部分匹配的子记录
[1]就是第二次匹配上的记录信息,$matches[1[0]为匹配的全部字符串,然后才是$matches[1][1]、$matches[1][2]、$matches[1][3]一次分别为各部分匹配的子记录
[2]以此类推
PREG_PATTERN_ORDER选项(默认):
结果排序为$matches[0]保存了完整模式的所有匹配,$matches[1]保存了第一个子组的所有匹配,一次类推。
关于子组的数目,通过程序调试发现,应该与”(正则表达式)”是一一对应的。每多增加一个带括号的正则表达式,$matches就会多一个分组。