python库确实强大……

由于某些论坛总是像秋天的蚂蚱,蹦达不了几天了,所以我一口气把它的一个版块的帖子全部抓了下来。本来只要再搞一个它的css文件下来就可以凑合着当归档了,不过我还是不满足于此:一大堆的<div></div>之类的html代码不是我所需要的。刚好在《dive into python》中看到过SGMLParser的用法,于是便发挥自己先前完全不会、用时边学边用、用完完全忘光的优良品质,写了一个提取帖子内容的python程序。

先说一件事,《dive into python》其实写得挺不错的,很注重描述python的特性,不过我觉得作者讲解的思路就是你要用python写出一个具有高度的适应能力、在各种各样的不同的险恶环境下都能够使用得全能型程序,有点类似于开发一个基于python的framework的工作,其中的“内省”啊“动态调用方法”啊什么的实在是让我触目惊心;我也曾看到过批评它讲得太复杂、以至于吓跑很多初学者的缺点。

对于我这种业余爱好者,它只要能帮上忙就行,例如写出一个乱七八糟但无论如何都还能用的ac娘工具就很不错了。为了参考这本书的内容,我想办法将那个原本极其通用的程序写得一点儿也不通用;对于每一个下载下来的页面,其实只要找到它括住帖子内容的html tag,然后将内容parse下来就行了。

借助于这个库的强大功能,我很轻易就能把那些<span style=”display:none”>乱码</span>的代码去掉了;而普通的浏览器拷贝是无法避免掉这些乱码的。再用glob读取当前文件夹的文件列表,批量处理,几分钟后就把几千个帖子全部转成干净的文本文件了。

python中列表和字典这两个集合类型的强大,是它好用的一个重要原因。以前用vbs写excel的宏,要进行某些棘手的操作的时候,上网查资料,会告诉你有一种叫XXX类型的对象可以处理这个情况,不过这些处理完之后返回的是另外一种YYY对象,要调用ZZZ方法才能将它print出来=.=。java更好,上网搜就说:你可以用一个XXXfactory……然后没有任何经营工厂经验的我就只好放弃了。python很多时候都是返回一个list或者dict,而且它们都是可以直接print出来而不用写for…in循环,很方便。

此外就是它有无比强大的库。我希望更多去了解一下http,例如cookie的原理什么的,然后能够自如地做各种抓取器。

ac娘工具:数据库从sqlite移到mysql

想来想去,与其先把sqlite数据库搞下来、再找个奇怪的转换工具转为mysql再弄上去,还不如直接在远程服务器上弄,注意备份就是了。

于是赶紧写了个python去搞,参考了一些资料很快就写好了。由于先前很少接触mysql,所以很多设置例如引擎啊、字符编码啊都没设置好,后来在出现乱码、又发现不能按照事务方式执行的时候,才知道应该选InnoDB引擎,然后所有地方都设置成utf8。

mysql比起sqlite真的是好太多了:习惯了用access的我,一直都以为mysql啊mssql啊这种不能作为文件随便挪的数据库非常不方便,可是现在才发现,有phpmyadmin这种强大的存在的话,mysql比要写python脚本才能好好地访问、还要设计现实界面不然就只是显示出一堆难懂的数组的sqlite好用多了;而且在有cpanel的情况下,备份也比sqlite方便。最重要的是,sqlite还分2和3,而python用的是3、php的CI用的是2,移植相当麻烦,哎。

另外,我又开始犹豫到底要不要做php的ac娘工具了:用python做出来的程序感觉快很多,特别是换了mysql后更快了,这也许和python脚本的执行效率有关,毕竟py要755权限才能执行,而php只要644。作为别人的网站的辅助工具,其实能用就行吧。

移植的时候对数据结构进行了重新设计,充分利用了mysql的特殊数据类型:分类字段就用了enum代替smallint,date和time也用了标准的时间和日期格式,所以原来的python程序除了改变数据库接口和表名之外,还有很多地方要修改,总体来说整个程序又优化了一点,而且还有优化的余地;此外,对自动抓取数据的cron也进行了修改,通过sys.path.append的方式来实现自建库的复用(原先是将几个库的代码全部拷到同一个文件中用:这已经超越了面向过程的编程,达到了汇编语言式的编程了。豆知识:cron,Linux中的时钟守护作业,其中一个特点是从根目录开始执行程序,所以不能够简单地import程序同目录下的其它库)。

折腾到这个程度,相当有成就感。

博客搬运完了

剩下一些小修小改工作。

在搜索blogbus2wordpress的方法的过程中,我了解到许多人都是从blogbus搬到独立博客当中的;而我也是其中之一。blogbus确实有很多的优点:其可定制性已经可以媲美wordpress,不过毕竟还是处于某个大环境之下,很多东西都让人忌惮;至少,还是不得不担心说错话被跨省。

huky.org这个域名挺早就入手了,可是godaddy的nameserver竟然被墙了,这是何等的悲哀啊,这个域名就像一出生就无家可归的弃儿般可怜,而申请的一个免费空间又有许多奇怪的问题(免费的代价就是经常被人拿来当白老鼠XD)。现在处于考研前几天的关键期,本来不应该“搞搞震”的,不过无所谓了,twitter api也需要有一个相对稳定的空间来放置。

很早之前不知道是谁推荐了Hostours,支持cPanel(正好在免费空间里面实践过),支持支付宝(对我来说其实无所谓),关键是有很便宜的小型空间(和dreamhosts比=.=),如果一次买2年还能便宜,不过考虑到白名单的可能性就没有这样做。嘛,就算要挪窝,也只是拷拷数据库那么简单的事情而已。

这个博客,估计也不会有很多人关注,所以能用就行,关键是里区要能用。说来感觉挺奇怪的,在blogbus我已经连续几个月没有收到过任何评论了,人缘真的已经糟糕到这个程度了吗555。空间并没有显式地说明支持python,所以ac娘工具不打算挪过来(何况是自己写的程序,不知道会不会严重损耗资源),仍然放在免费空间好了。最近的目标是用php的CodeIgniter架构重写ac娘工具,如果搞定了的话会放过来也不一定,但肯定不会用相同的域名。

python会继续学习,不过是作为一个提供便利的脚本语言而不是php的替代方案。

无论如何,国外空间的愿望已经达成了。我还有很多很多的愿望,也许这辈子都实现不完,可是只要不浪费光阴的话就不后悔。