0x00 前言
前段时间一直在抓取一个站点,这个站点非常难爬取,原因如下:
- 第一点,网站Ajax超级多.
- 第二点,所有的API都是js加密后才能访问.
- 第三点,这也是最最要命的一点,访问特别特别不稳定.有的时候加载时间特别长,70秒请求一个API这点我会告诉你吗?动不动就404 not found我能和你说?
当然,这些都难不倒我,我最后挑选了Phantomjs,编写Js调用脚本,从命令行调用程序,将抓取结果输出到标准输出流中,接着获取使用beautifulsoup进行基本的解析.剩下的就是入库了.
这里的技术点也是蛮多的,以后有机会就介绍一下.(汗,因为毕业设计这回事情实在是耽误了不少梳理博文的时间,攒了不少开了个头的文章,但自己又不忍心把不好的文章放出来污染大众视野.)
0x01 事情开始变化了
程序在运行了很长一段时间之后,有一定几率崩溃.再次开启的时候,有一些需要人工检查的参数,所以我并不是很方便的使用supervisor.
0x02 那怎么该如何是好?
公司的电脑上写了每个小时将自己的抓取情况发送给我的邮箱,但是糟心的问题是,一旦我在家中,程序崩溃了,我也就只能浪费掉我那接近半天的抓取时间了.我必须要远程控制公司的电脑.怎么办呢?
- 第一种,使用ssh,这样我在家里就可以远程控制公司的电脑了.
- 第二种,使用远程控制软件.
我首先想到的是使用ssh,因为这个比较常用,用起来会习惯一些.
2.1 在家里配置ssh到公司的电脑上需要哪些方法呢?
请注意:
ssh无法穿透路由器
什么意思?很简单,对于你在家里这个外网来说,你只能"看到"公司在公网的这台路由器,无法看到经过NAT转换的公司内网的服务器.
于是,我们可以得出远程方法如下:
-
公司路由器的公网地址固定,那么可以在路由器上直接做一个端口映射,将路由器的ip的22端口(也可以是其他端口)映射到公司局域网内部的一台机器.这样你就可以直接ssh公司的路由器,但最终访问的就是你的mac或者linux机器了.
-
那如果公司的路由器是拨号上网的呢(比如我现在待得这个小公司,使用的是电信宽带光纤拨号上网)?很简单,通常情况下你需要及时获取公司公网的ip地址.所以,你只需要在你的公司电脑上写个脚本定时把公网的ip地址发给你的邮箱里就好了.
-
在操作的时候,直接使用tmux或者screen就可以查看这些耗时软件的运行情况了.
但,我最后没有使用这个方案呢?因为电信把路由器的高级功能给阉割掉了,端口映射做不了.并且,由于公司的路由器均为普通网线口,并非光纤接口,唯一有光纤接口的就仅仅只有电信的路由器.
虽然ssh很方便,可是打电话找电信太麻烦,于是这个方案被我否定了.
2.2 那么远程控制软件怎么样呢?
经过不断的搜索,我发现了一款非常棒的穿透力特别强远程操作又相对稳定的软件.可能你也听说过这款软件teamviewer.
前段时间也用这个软件给学弟们操作搭建部署环境的时候用到的,非常好用.比qq的远程协助稳定多了.
并且,可以通过注册账号,直接把机器分配给账号.
然后直接登录账号进行连接就好了.
操作界面.png 远程状态╮(╯▽╰)╭所以,我就可以安安心心在家里阅读抓取情况的邮件,当邮件抓取数量出现异常的时候,我就直接开远程过去查看了,修整软件就好了.
写爬虫的感觉就像皇上批阅折子一样0x03 结论
当然,其实最好的方式还是通过ssh配合tmux进行管理,但是如果你没有路由器的操作权限(不能做端口映射),或者像我一样公司的上网环境比较坑(电信路由器)的话,teamviewer也算是图形界面中优雅的远控方式.并且,可以使用windows控制mac,也可使用mac控制windows,这点实在让人非常心动.
网友评论