九/082
php抓取页面技巧
都知道用php抓取网页文件要用到正则表达式preg_match_all和file_get_contents函数,后者用来获取文件内容,前者用来过滤出需要的内容。
昨天抓取一个页面的时候,发现了一个有点bt的页面。里面的标点符号都替换成了图片,就是为了防止批量复制粘贴,因为这样粘贴进来的文章没有标点符号可想而知有多痛苦了。不过难不倒我们。
虽然每个文章的标点符号是用程序随即生成图片名称的,也就是说每个图片的名字都不一样,但我们可以肯定同样的标点符号(比如逗号)图片的md5值肯定是一样的,可以测试下:
<?php
copy(‘http://www.target.com/article1/comma54321.gif’, ‘pic1.gif ‘);
copy(‘http://www.target.com/article2/comma12345.gif’, ‘pic2.gif’);
echo md5_file(‘pic1.gif’), ‘<br />’, md5_file(‘pic2.gif’);
?>
可以看出不同文章里面的相同标点符号图片md5值是一样的,这样我们就可以在抓取程序中定义一个数组,用来做替换。
<?php
$replace_into = array(
‘md5_1′ => ‘,’,
‘md5_2′ => ‘。’,
‘md5_3′ => ‘、’,
);
if (array_key_exists(md5_file(‘url’), $replace_into)) {
// do replacing str…
}
?>
这样抓取出来的东西则把图片替换为了我们想要的中文标点符号。问题解决。
此外,碰到一些有规则的图片,我们可以利用seq和shell知识做出一个下载器,下载下来进行分析。
#!/bin/bash
for i in `seq -w 1 100` do
wget -c "http://www.target.com/images/file_$i.gif"
done
13:01 on 九月 26th, 2008
呵呵,这就是解决办法的能力!佩服
19:43 on 七月 8th, 2011
好像不是很全