web crawler 抓站

有些网站上会提供很有价值的内容。 而这其中大部分网站都不提供feed,不能坐等数据送到面前就只能主动出击自己去找。 当然把这些网站加入bookmark,一个个访问用肉眼去看是解决方案。对于程序员来说,呵呵了。 所以一直在找一个抓站的工具。 曾经花费不少时间来安装调试scrapy,最终放弃。这个东西号称最强大的抓站工具。的确是太强大,以至于很难上手。 自己的需求也不过是访问某些网站的某些特定url,提取所有文本内容,供查询。 最终放弃用现成工具,决定自己再造轮子。 工作中用的jmeter,selenium,还有去年做的自动提交表单的程序等等都能派上用场。 所以还不是从0开始。 起初做了个java版,测试的时候顺便把某个电子书下载网站的所有电子书都抓下来了。 说道抓站,可能印象里就是偷东西干坏事。果不其然程序出来了,干正事之前先干了坏事。 要抓的网站不可能都一个结构,有很多不确定性。与php随心所欲的array相比,java对不确定性的处理显得有些无力了。 这两年一直用php对php更熟悉一些,所以又改写成php。 java和php都有自动解析html的工具,有的工具就是正则表达式的循环来实现的,性能方面有问题。 去年写的程序因为对性能要求,没有用自动解析工具,而这次的抓站程序对性能没有要求(如果访问太频繁反而容易被封,还要加延迟),所以就用了解析工具。和去年的程序比,整洁了不少。 php的程序,目前实现了用mongodb来存储抓站过程。 待开发功能: 用json配置文件,针对不同网站抓取不同内容 优化现有php程序,让代码更通用,适用于各种网站 做schedule来定期抓取 追加认证功能,可以抓login后的网站 用mean stack来展示已抓取内容 最后用mean结构来重写抓站程序,剔除php程序

(家里构建服务器之)端口映射

家里的网是光纤,很快很快。 网络设备列表: CTU,网络接入设备,带路由功能 wifi路由器,常用路由器 小米路由器,“尝鲜”购入的网络设备,因为不相信xiaomi的品行,时而通电,时而断电 macmini,有线接入CTU,无线接入wifi路由器 若干终端,接入wifi路由器 需求: macmini上用virtualbox构建若干服务器,需要从外网直接访问到这些服务器。 能功过域名访问(杂谈:因为一些历史原因,现在手里还有10几个域名) 家里的若干终端也需要用域名访问 网络安全 遇到问题: 通过修改CTU设置,让外网访问穿过CTU 域名和ip地址匹配 macmini上的虚拟机,不能接收端口映射 解决: CTU(防火墙里开放端口80,端口转换80->8080映射到macmini上) macmini(虚拟机设置,端口8080映射给虚拟机的80) 若干终端通过修改hosts文件来强制ip域名的匹配 80端口之外,只开放一个git服务端口,该端口只能执行git命令,用key来访问 待解决问题: 需要手动绑定域名和ip 没有固定ipCTU重启就会改变ip地址,以前通过域名商提供的软件来实现动态绑定,但该软件只有windows版本。可以在macmini上跑一个win虚拟机装这个软件 搞定内网的dns解析问题,放弃修改hosts文件的方法 过两天上图

自宅にサーバを立てる

又把server搬回家了。原因很简单,钱~ 用ec2的micro每个月大概在$8左右,加上github的$7,合起来也不算多。 但ec2是micro的实例,性能上受限制能做的事情不多,要搞一个“随心所欲”的测试机,就不止这个数了。 去年测试跑了一个月的m2,花费了$80,很疼。 去年新置了个16G的macmini,7×24小时开机,计算资源闲着也是闲着,索性就把云主机和github代码服务器都迁回家里。 在迁移的过程中,域名设置,端口号转换上浪费了不少时间。 以前在这上面就没少费时间,没做到吃一堑长一智。 还有就是,因为wordpress备份数据丢失,导致个人blog丢了一年的数据。 很疼,很疼,很疼。 现在习惯用mindmap和evernote来记录,用blog会很少吧。 不过迁到家里了,想写就写写。 ec2上跑的服务,wordpress和背单词的app迁移了,其他几个web服务,程序迁移完成了还没跑起来, 再有就是svn数据迁完了,还没转成git。 以后有时间慢慢弄。 现在macmini上跑的是virtualbox和vagrant的组合。过段时间搞一个docker玩玩。