用Python抓取QQ空间文章(2)

之前写过一篇文章简单说明如何用Python抓取QQ空间的文章,当时的脚本有两个缺陷:1.没有保存日志图片 2.未能获取日志发布时间。

当然原有的脚本还是可以使用的,今天对其进行了修改,改进了上面两个缺陷。

前篇文章说,未能获取日志发布时间的原因是文章是从简版抓取下来的,因此要想获取精确时间,就必须找到完整的日志地址。

在HttpFox的帮助下,地址并不难找:

http://b1.cnc.qzone.qq.com/cgi-bin/blognew/blog_output_data?uin=QQ号码&blogid=文章ID

当然前面的二级地址与网络条件有关。这个地址就是真正的日志地址。

只要将上次的脚本进行小幅修改,就可以抓取日志的内容了。

接着要保存图片。

这里只考虑保存在QQ空间相册里的图片,其他图床的情况较复杂,有兴趣的同学可以自行分析。

既然是保存在QQ空间相册中的图片,域名自然是QQ的,但是QQ的图片域名并没有后缀,而是像下面这样:

http://b214.photo.store.qq.com/psu?/28499588-e936-4ad1-9d29-8048ecba8c54/TynjoQTxqQWMDDZ43wMDg7x2EemJeXmuQRkFtZ4S7qY!/b/YUAUnX.eAQAAYlIImn99AQAA

上面这个是近期日志的图片地址,下面这个是之前日志的图片地址:

http://b210.photo.store.qq.com/http_imgload.cgi?/rurl4_b=d43765322eef1b64785ae3ab1f68a8a7e8f3cd5f08244b76a9981b6e6a62e0f81f601ece0421fac90b29f6c18bb5ea2839f18d666a3069bf880fd98a97d8e857ade443f4479c3719504d07c2033c4ff3e0fcfde6&a=210&b=210

好在腾讯似乎没有做太多的防盗链,也就是说,直接复制上面的地址到浏览器,是可以直接打开的,并且图片的URL只是后面有变化。因此图片地址的正则表达式也就很好写了:

http://bd*.photo.store.qq.com/[^"]*

但是因为这个URL是看不出后缀的,因此需要获取MIME类型并判断图片后缀:

imgInfo = urllib2.urlopen(image).info()                     #获取图片信息

这样可以获取图片的所有相关信息,得到的是一个字典类型变量,其中的”Content-Type”项就保存了图片的MIME类型,通过对MIME字符串进行处理,就可以得到图片的后缀。

剩下的就是保存图片的工作了,与保存网页相同,不再赘述。

更新后的代码仍然托管在bitbucket:http://goo.gl/vTNL1

至此,所有抓取的工作就完成了,剩下的就是对已抓取的内容进行处理,提取日志内容和评论。