magpierss中就用到了snoopy,这让我有点兴趣去研究下这个咚咚。再SF上,找到了这个源代码。居然就是一个类,但不要笑看哦,功能可是很强大的。
官方的简介, snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。
下面是它的一些特征:
1、方便抓取网页的内容
2、方便抓取网页的文字(去掉HTML代码)
3、方便抓取网页的链接
4、支持代理主机
5、支持基本的用户/密码认证模式
6、支持自定义用户agent,referer,cookies和header内容
7、支持浏览器转向,并能控制转向深度
8、能把网页中的链接扩展成高质量的url(默认)
9、方便提交数据并且获取返回值
10、支持跟踪HTML框架(v0.92增加)
11、支持再转向的时候传递cookies
下面是简单的例子,比如说我们抓取我的blog的文字
^_^,不错把,在比如抓取链接
嘿嘿,效果不错把,而且全部都是我们需要的url,而没有那种/blog/read.php/85.htm那种东西。
snoopy更新了(已经两年没有更新了)。snoopy的地址是
http://sourceforge.net/projects/snoopy/。虽然只是更新到1.2.4(之前是1.2.1),也只是修正了一些小的BUG,但很高兴,作者又开始回来关注这个了。
snoopy是个非常好用的类,在PHP抓取中用的非常广。
/* update at 2009-03-23*/
在项目应用过程中,发现了一个BUG,那就是用$snoopy->fetch()来抓取百度图片搜索时,因为百度默认是每页显示20张图片,可以通过rn这个参数来指定每页显示多少张图片,例如,http://image.baidu.com/i?tn=baiduimage&ct=201326592&cl=2&lm=-1&pv=&word=star&z=0&rn=2,在用$snoopy->fetch()中rn并没有起作用,不过rn等于什么值,它抓取出来的还是每页20张图片。
为了兼容,我自己把snoopy的fetch($url)多加了个参数,具体如下: