今天偶然发现一个超强的代码编辑器Sublime Text,简单使用了一下:它的重量级介于notepad+和eclipse之间,对语言的支持很全面,而且十分注重开发人员的效率,想必用惯了vim的同学会觉得很爽。再配合它的Package Control扩展,能够方便的添加插件以增加个性化的功能,如果实在是没有功能能够满足你了,也可以用python自己编写一个插件。更全面的介绍见这里,就不详述了,大家有空试用一番。
分类: programming
使用Scrapy + Selenium抓取网页
某些页面是使用ajax技术渲染的,无法通过直接下载HTML源代码来解析,所以需要调用Selenium等软件帮助我们获取渲染后的HTML代码。
所需的软件包括:
1. Scrapy (http://scrapy.org/),python下的无敌抓取框架;
2. Selenium Server (http://seleniumhq.org/projects/remote-control/),可以用各种语言远程控制Selenium做各种事情,一般用于构建自动化测试工具,这里我们用来抓取网页;下面是原理图:
3. 在电脑的Firefox中安装Selenium IDE插件。
下面我们开始一步步来做:
1. 首先,进入你的电脑上Selenium Server的jar包所在的目录,通过java -jar xxx.jar的方式运行它,程序会自动监听本地的4444端口;
2. 参考我的上一篇博文《如何连入一台没有外网IP的服务器》 ,将本地的4444端口与服务器的4444端口建立Remote映射;
3. 使用Scrapy框架开始编写python程序,具体的例子不再赘述,网上有许多例子,比如这个:https://gist.github.com/1045108。仅描述几个要点:
a) 在python里调用selenium这样写:
self.sel = selenium("localhost", 4444, "*firefox","http://example.com/")
不过直接写 “*firefox” 可能会找不到Firefox的路径,这时可以强制指定Firefox的程序路径,比如:”*firefox D:/Program Files/Mozilla Firefox/firefox.exe”。
b) 获取Firefox渲染完成后的HTML代码:
sel = self.selenium
sel.open(response.url)
sel.wait_for_page_to_load(10000)
html = sel.get_eval("selenium.browserbot.getCurrentWindow().document.getElementsByTagName('html')[0].innerHTML")
Done!
如何连入一台没有外网IP的服务器
我们有的时候需要从本地电脑连入线上的数据库服务器进行各种操作,而通常数据库服务器是不允许外网访问的,如何解决这个问题呢?
1. 打开putty,在 SSH -> Tunnels 菜单增加一个本地端口到远程端口的对应关系,如下图:
如果你在Ubuntu或MAC下办公,那么更简单了:
在本地机器敲入:ssh -Nf -L 3307:localhost:3306 remote.server.com;
在远程机器敲入:ssh -Nf -R 3306:remote.server.com:3307 localhost。
原理是一样的,就是创建一个隧道。
2. 打开你的MySQL客户端(以HeidiSQL为例),配置host为127.0.0.1,端口为3307(或你自定义的本地端口),输入远程MySQL的用户名和密码即可,如果这个时候报Access Denied错误,要留心你的用户名所在IP是否为SSH Tunnel设置的远程IP,如果不是需要改为一致的。
Enjoy it!
syslog-ng的相关心得
最近将酷讯一些服务器的后端和前端服务器部署了syslog-ng服务。日志集中转储带来的好处就不多说了,无论是对存储空间规划的合理性,还是统计分析的便利性,都有非常重要的意义。下面浅谈几点心得:
1. syslog-ng的特点:
a) 数据以推送的方式进行集中存储。这样即使日志存储出现故障,也不会降低线上服务的性能;
b) 数据传输非常优异,CPU、IO几乎没有任何影响,在实际应用中,每天单台服务器传输5-10GB的文件还是没问题的;
c) 支持多种转发形式(TCP、UDP、pipe),这样我们可以写程序方便的监听并处理日志流的输入,不用挂个死循环去检查日志是否有更新。
2. 配置时的注意事项:
a) 尽量用3.x以上的版本,因为配置文件支持更多的特性;
b) 如果需要编译安装,主要依赖的两个包是eventlog和glib2。
欢迎针对运维相关的技术进行交流,邮件联系:bluetent [AT] gmail.com .