appengine建立自己的web service抓取新浪图片

twitter一位朋友提到想抓取新浪娱乐http://slide.ent.sina.com.cn的高清图片,省得一张张去翻看。

首先分析这个需求可不可以完成,打开网页源代码,哇,原来所有图片地址在第一页就能看到,而且图片地址出现的很有规律,这就很容易搞定了。

image

前一阵看过一个Python的类库叫做beautifulsoap,它可以完成解析html的工作,加上appengine的支持,简单到爆。

1,先下载python以及google appengine,如果没有appengine账号申请一个即可,如果不清楚google一下都能找到。

2,下载beautifulsoap,解压BeautifulSoup.py到你项目目录里面就可以了。

3,在app.yaml里面加入,这样就把soap这个网址定向到img.ly了:

– url: /soap/.*
        script: img.py
        secure: optional

4,建立img.py,main函数部分使用google的webapp框架,关联到SoapLink类:

image

5,建立SoapLinks类,可以参考appengine的文档:

image

其中要注意的是beautifulsoap解析出来的是一个Tag对象(而不是String),所以要用ccontents[0]来获得string,这个花了我一些时间。

然后就可以部署服务了,具体可参考appengine或者留言问我。

demo:http://ucfcuk.appspot.com/soaplinks/ 加上你要访问的新浪娱乐地址

如:http://slide.ent.sina.com.cn/slide_4_703_11949.html

image

代码:http://gist.github.com/487246

img.ly yfrog图片上传程序 – 玩玩google appengine

这两天晚上没事,做了个appengine上的玩具(toy software),可以把我指定的图片url存放到http://imgur.comhttp://img.ly  http://yfrog.com,由于imgur以及img.ly在大陆可以访问,可以作为一种博客图片的保存方案。

代码很简单,放在gist.github.com上面了。由于img.ly和yfrog需要twitter验证,所以你需要有一定的翻爬这个wall墙的手段。把下面代码中developer key以及twitter的用户名密码部分替换成你自己的就可以用了。

如果要用的话,只要包含这个py文件,然后在appengine上建立一个新的url route就可以了。这些就不详述了,大家可以参考appengine的文档。

需要注意的是imgur有时效性,3个月不浏览一次文件会被删掉,所以img.ly算是现阶段最好的方案,缺点是需要把图片读取成二进制才能上传,做不到url方式上传(imgur和yfrog可以的)。