毫无疑问,数据是数据分析的基础,而对于我等平民来说,获取大量数据的方式自然是通过爬虫采集,而对于笔者来说,写爬虫最自然的方式就是用Python写了。短短几行代码,就可以完成一个实用的爬虫,多清爽。(请参考:《记录一次爬取淘宝/天猫评论数据的过程》

爬虫要住在哪里? #

接下来的一个问题是,这个爬虫放到哪里运行?为了爬取每天更新的数据,往往需要每天都要运行一次爬虫,特别地,是在某个点定时运行。这样的话,老挂在自己的电脑运行是不大现实,因为自己的电脑总有关机的时候。也许有读者会想到放在云服务器里边,这是个方法,但是需要额外的成本。受到小虾大神的启发,我开始想把它放到路由器里边运行,某些比较好的路由器是可以外接U盘,且可以刷open-wrt系统的(一个Linux内核的路由器系统,可以像普通Linux那样装Python)。这对我来说是一种很吸引人的做法,但是我对Linux环境下的编译并不熟悉,尤其是路由器环境下的操作;另外路由器配置很低,一般都只是16M闪存、64M内存,如果没有耐心,那么是很难受得了的。

我也想过买个树莓派来做这个事情。目前的树莓派2B已经有1G内存,俨然一台功能齐备的微型PC机,价格也不贵,确实值得一玩。然而需要额外的支出不说,如果买个树莓派来就是为了放爬虫,又似乎有点浪费了。想过各种思路后,昨天突然就冒出个想法来了——除了笔记本外,我们常用的智能设备就是手机了,干嘛不放到手机上呢?反正我们的手机基本一天到晚都连着wifi,而且晚上我们睡觉那段时间手机基本是闲置的,放在手机上采集,似乎是最适合不过了!

艰难的摸索 #

有了想法,赶紧动手。当然,整个摸索过程是颇为痛苦的。

首先是手机上的Python环境,这个很简单,因为有QPython可以用,这是个功能丰富的安卓的Python环境,安装即可以用。跟PC的Python差别不是很多,除了不能安装很多第三方库之外。由于爬虫要采集中文信息,所以我选择了QPython3。据说有SL4A和PY4A可以用,但是它们似乎很久没有更新了,配置也更复杂些,我也就懒得尝试了。

然后是写爬虫。写爬虫要注意用QPython3中自带的库。我之前写爬虫习惯用requests这个库,2.x和3.x都通用。但是QPython3并没有带这个库。网上的教程一般教我们用urllib2这个库,事实上这个库在2.x才有,在3.x已经整合到urllib中了,要把urllib2换成urllib.request才行了。当然,更重要的是,QPython3带有正则表达式的re库,这对于写爬虫来说是必须有的!!还有,QPython3带有csv库,这个方便我们保存结果。具体的爬虫就不给出了,请读者自己摸索吧。

接下来,到了最难的一步了,如何让爬虫在手机上定时运行??

昨天和今天,我查了很多资料,试了很多种方法,失败了N多次。最终摸索出一个可行的方法。

超级终端设置

超级终端设置

第一步是运行。安装“超级终端”(我不知道有没有其他类似的软件可以实现),这是个安卓的终端模拟器,能够让我们的安卓有像Linux下的终端。最重要的是,它在“设置”那里,可以选择以root启动,还可以自定义终端启动命令行,在终端启动命令行那里(右图的“命令行”选项)输入
/data/data/com.hipipal.qpy3/files/bin/qpython.sh /sdcard/com.hipipal.qpyplus/scripts3/582.py
红色部分就是我们编写好的爬虫脚本。填写好之后,关闭超级终端,重新打开超级终端,如果发现打开终端时就自动运行刚才指定的爬虫脚本,那么就成功了;

第二步是定时。可以安装“定时达人”之类的软件,这类软件有很多,随便选一个即可,只要它支持定时运行指定的app,我们就在上面建立一个定时任务,选择定时运行超级终端。

总结 #

放个运行图:

手机爬虫界面

手机爬虫界面

至此,我们已经完成了安卓上的Python爬虫编写和定时自动运行。总的来说,我们就是用QPython来运行Python脚本,然后用定时达人之类的软件来定时运行app。如何让QPython来指定执行我们的脚本呢?通过超级终端来指定启动命令——这样一来,超级终端就变成了一个专门来运行这个爬虫的app了(当然,这似乎对超级终端有点不公平,大材小用了,然而我没有想到更好的办法。)

转载到请包括本文地址:https://kexue.fm/archives/3477

更详细的转载事宜请参考:《科学空间FAQ》

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。

如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

如果您需要引用本文,请参考:

苏剑林. (Oct. 21, 2015). 《把Python脚本放到手机上定时运行 》[Blog post]. Retrieved from https://kexue.fm/archives/3477

@online{kexuefm-3477,
        title={把Python脚本放到手机上定时运行},
        author={苏剑林},
        year={2015},
        month={Oct},
        url={\url{https://kexue.fm/archives/3477}},
}